标签: nativequery

如何使用Doctrine 2截断表格?

我假设我需要构建一个本机查询来使用Doctine2截断表.

$emptyRsm = new \Doctrine\ORM\Query\ResultSetMapping();
$sql = 'TRUNCATE TABLE Article';
$query = em()->createNativeQuery($sql, $emptyRsm);
$query->execute();
Run Code Online (Sandbox Code Playgroud)

这给出了错误

SQLSTATE[HY000]: General error
Run Code Online (Sandbox Code Playgroud)

我需要更改为我的代码才能使其工作?

php mysql doctrine-orm nativequery

32
推荐指数
3
解决办法
4万
查看次数

JPA将列表传递给命名本机查询中的IN子句

我知道我可以在JPA中将列表传递给命名查询,但NamedNativeQuery怎么样?我尝试了很多方法,但仍然无法将列表传递给NamedNativeQuery.任何人都知道如何将列表传递给NamedNativeQuery中的in子句?非常感谢你!

NamedNativeQuery如下:

@NamedNativeQuery(
   name="User.findByUserIdList", 
   query="select u.user_id, u.dob, u.name, u.sex, u.address from user u "+
         "where u.user_id in (?userIdList)"
)
Run Code Online (Sandbox Code Playgroud)

它被称为这样:

List<Object[]> userList = em.createNamedQuery("User.findByUserIdList").setParameter("userIdList", list).getResultList();
Run Code Online (Sandbox Code Playgroud)

但结果并不像我预期的那样.

System.out.println(userList.size());  //output 1

Object[] user = userList.get(0);
System.out.println(user.length);   //expected 5 but result is 3
System.out.println(user[0]);       //output MDAVERSION which is not a user_id
System.out.println(user[1]);       //output 5
System.out.println(user[2]);       //output 7
Run Code Online (Sandbox Code Playgroud)

jpa arraylist in-clause nativequery

28
推荐指数
5
解决办法
6万
查看次数

Spring Data JPA删除本机查询抛出异常

我有一个User实体和一个Role实体.关系定义如下:

@OneToMany
@JoinTable(name="USER_ROLES", inverseJoinColumns=@JoinColumn(name="ROLE_ID"))
private List<Role> roles = null; 
Run Code Online (Sandbox Code Playgroud)

现在,当我删除一个角色时,我需要从具有该角色的所有用户中删除该角色.通常,您可以通过查找具有此角色的所有用户,从列表中删除角色以及保存用户来执行此类操作.但是,当可能有超过一百万用户时,我不想在应用程序中循环这么多实体.所以,我想使用本机查询从USER_ROLES连接表中删除行.我尝试将其添加到我的存储库:

@Query(value="DELETE FROM user_roles WHERE role_id = ?1", nativeQuery=true)
public void deleteRoleFromUsersWithRole(Long roleId);
Run Code Online (Sandbox Code Playgroud)

但是,当我这样做时,我在日志中看到以下内容:

[EL Fine]: sql: 2013-11-02 14:27:14.418--ClientSession(707349235)--Connection(2096606500)--Thread(Thread[http-bio-8080-exec-4,5,main])--DELETE FROM user_roles WHERE role_id = ?
   bind => [1000110139999999953]
[EL Fine]: sql: 2013-11-02 14:27:14.478--ClientSession(707349235)--Thread(Thread[http-bio-8080-exec-4,5,main])--SELECT 1
[EL Warning]: 2013-11-02 14:27:14.482--UnitOfWork(1795045370)--Thread(Thread[http-bio-8080-exec-4,5,main])--Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.4.1.v20121003-ad44345): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: org.postgresql.util.PSQLException: No results were returned by the query.
Error Code: 0
Call: DELETE FROM user_roles WHERE role_id = …
Run Code Online (Sandbox Code Playgroud)

java jpa nativequery spring-data-jpa

20
推荐指数
2
解决办法
2万
查看次数

如何在hibernate本机查询中使用MySQL assign运算符(:=)?

我正在使用Hibernate.我写了一些原生查询,因为我需要使用sub select语句.

查询看起来像这样:

SELECT sub.rownum FROM 
    (SELECT k.`news_master_id` AS id, @row := @row + 1 AS rownum 
        FROM keyword_news_list k 
        JOIN (SELECT @row := 0) r 
        WHERE k.`keyword_news_id` = :kid
    ORDER BY k.`news_master_id` ASC) AS sub 
WHERE sub.id  = :nid
Run Code Online (Sandbox Code Playgroud)

当我像这样运行此查询时:

sessionFactory.getCurrentSession()
    .createSQLQuery(query)
    .setParameter("kid", kid)
    .setParameter("nid", nid)
    .uniqueResult();
Run Code Online (Sandbox Code Playgroud)

出现此异常:

org.hibernate.QueryException: Space is not allowed after parameter prefix ':' ....
Run Code Online (Sandbox Code Playgroud)

这可能是因为:=操作员.我发现了一些Hibernate问题.这个问题仍然存在.这个问题没有解决办法吗?

java mysql hibernate nativequery

18
推荐指数
3
解决办法
1万
查看次数

带有SqlResultSetMapping和本机查询的JPA数据存储库

我遇到了以下情况:

我的实体彼此相关,但是这样我就无法使用JPQL.我被迫使用原生SQL.现在我想将这些结果映射到ValueObject.要清楚,我不想得到Object array(List<Object[]>)的列表.我有6个实体,我只需要一些列.任何人都可以举例说明如何从本机查询实现这样的映射?

我经历过的教程.

我的代码:

@SqlResultSetMapping(
    name = "findAllDataMapping",
    classes = @ConstructorResult(
            targetClass = MyVO.class,
            columns = {
                    @ColumnResult(name = "userFirstName"),
                    @ColumnResult(name = "userLastName"),
                    @ColumnResult(name = "id"),
                    @ColumnResult(name = "packageName")
            }
    )
)

@NamedNativeQuery(name = "findAllDataMapping",
    query = "SELECT " +
            "    u.first_name as userFirstName, " +
            "    u.last_name as userLastName, " +
            "    i.id as id, " +
            "    s.title as packageName, " +
            "FROM " +
            "    invoice as i " +
            "JOIN user …
Run Code Online (Sandbox Code Playgroud)

java spring sqlresultsetmapping nativequery spring-data-jpa

13
推荐指数
3
解决办法
1万
查看次数

如何使用@SqlResultSetMapping将ONE-TO-MANY本机查询结果映射到POJO类中

我正在使用Java和MySql在后端API中工作,我正在尝试在JPA 2.1中使用@SqlResultSetMapping将ONE-TO-MANY本机查询结果映射到POJO类,这是本机查询:

@NamedNativeQuery(name = "User.getAll”, query = "SELECT DISTINCT t1.ID, t1.RELIGION_ID t1.gender,t1.NAME,t1.CITY_ID , t2.question_id, t2.answer_id  FROM user_table t1 inner join user_answer_table t2 on t1.ID = t2.User_ID“,resultSetMapping="userMapping")
Run Code Online (Sandbox Code Playgroud)

而且,这是我的结果SQL映射:

@SqlResultSetMapping(
            name = "userMapping",
            classes = {
                            @ConstructorResult(
                                    targetClass = MiniUser.class,
                                    columns = {
                                            @ColumnResult(name = "id"),
                                            @ColumnResult(name = "religion_id"),
                                            @ColumnResult(name = "gender"),
                                            @ColumnResult(name = "answers"),
                                            @ColumnResult(name = "name"),
                                            @ColumnResult(name = "city_id")

                                    }
                            ),

                            @ConstructorResult(
                                    targetClass = MiniUserAnswer.class,
                                    columns = {
                                            @ColumnResult(name = "question_id"),
                                            @ColumnResult(name = "answer_id")

                                    }
                              )

            })
Run Code Online (Sandbox Code Playgroud)

而且,这是POJO类的实现:(我刚刚删除了构造函数和getter/setter)

MiniUser类

public …
Run Code Online (Sandbox Code Playgroud)

one-to-many sqlresultsetmapping nativequery jpa-2.1

8
推荐指数
1
解决办法
967
查看次数

Hibernate本机查询在同一个表上有多个连接返回错误的结果

我正在使用本机sql查询,其中我有一个玩家表,我加入三次,首先得到击球手的名字,然后获得投球手的名字,然后获得外野手的名字.现在第一个连接工作,但接下来的两个也返回相同的名称,即击球手的名字.

这是sql查询

 select 
    del.over_no , 
    del.delivery_no , 
    batsman.sname , 
    outType.name , 
    outBy.sname , 
    fielder.sname , 
    bep.runs, 
    bep.deliveries, 
    bep.fours, 
    bep.sixes

    from delivery del 
    INNER JOIN batsman_performance bep ON del.innings_id=bep.innings_id 
    INNER JOIN ref_player batsman ON del.batsman_id = batsman.id
    INNER JOIN ref_player outBy ON del.bowler_id = outBy.id
    LEFT OUTER JOIN ref_player fielder ON del.fielder_id1= fielder.id
    INNER JOIN ref_out_type outType ON del.out_type_id=outType.id
    and del.out_type_id IS NOT NULL 
    and del.innings_id=:innings_id 
    and bep.player_id = del.batsman_id
    order by over_no, delivery_no;
Run Code Online (Sandbox Code Playgroud)

我没有为所选列使用别名,因为当我这样做时,hibernate为我使用别名的任何列引发了异常

请求处理失败; 嵌套异常是javax.persistence.PersistenceException:org.hibernate.exception.SQLGrammarException:"over_no"未找到柱:与根源java.sql.SQLException中无法执行查询].

此查询工作时,我在我的MySQL客户端上运行它,并返回正确的数据集,但是当我在我的代码运行它,结果莫名其妙定置覆盖随后的两个上ref_player表连接,留下我的击球手的名字在所有三列,即batsman.sname,outBy.sname和fielder.sname列中的相同名称.

最近两天我被困在这里,请帮助一下.

mysql hibernate join nativequery

7
推荐指数
2
解决办法
4500
查看次数

将列表参数设置为本机查询

我想将参数设置为本机查询,

javax.persistence.EntityManager.createNativeQuery
Run Code Online (Sandbox Code Playgroud)

这样的事情

Query query = em.createNativeQuery("SELECT * FROM TABLE_A a WHERE a.name IN ?");
List<String> paramList = new ArrayList<String>();
paramList.add("firstValue");
paramList.add("secondValue");
query.setParameter(1, paramList);
Run Code Online (Sandbox Code Playgroud)

尝试此查询会导致异常:

Caused by: org.eclipse.persistence.exceptions.DatabaseException:
Internal Exception: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:
You have  an error in your SQL syntax; check the manual that corresponds to your MySQL server 
version for the right syntax to use near
'_binary'??\0?sr\0?java.util.ArrayListx?????a??\0?I\0?sizexp\0\0\0?w?\0\0\0t\0
f' at line 1
Error Code: 1064
Call: SELECT * FROM Client a WHERE a.name IN ?
        bind => [[firstValue, secondValue]]
Query: ReadAllQuery(referenceClass=TABLE_A …
Run Code Online (Sandbox Code Playgroud)

java sql jpa nativequery

7
推荐指数
1
解决办法
9703
查看次数

EntityManager 本机查询语法?

以下方法使用Java 实体管理器的createNativeQuery()方法:

   public List<Dog> findDogById(String id) {

        List<Dog> resultList = new ArrayList<>();
        try {
            resultList = persistence.entityManager().createNativeQuery(" SELECT * FROM DOG WHERE ID = '" + id+ "' ", DogEntity.class).getResultList();
        } catch (Exception e) {
        }
        return resultList;
    }
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是,当我期望该方法返回结果时,它没有返回结果。即,当我直接运行查询时,SQL Developer我得到结果,但该方法不会返回相同的结果。

我的Syntax正确吗?我对此不确定:

" SELECT * FROM DOG WHERE ID = '" + id+ "' "
Run Code Online (Sandbox Code Playgroud)

即我需要 the'和 the吗"

java persistence jdbc entitymanager nativequery

7
推荐指数
1
解决办法
2万
查看次数

spring data jpa - 基于接口的投影中的自定义类型转换

我正在尝试实现基于接口的投影,但无法使其与我的自定义类型列一起使用。

下面是我正在尝试做的示例:

存储库:

@Query(value = "SELECT customType from TABLE", nativeQuery = true)
List<TestClass> getResults();
Run Code Online (Sandbox Code Playgroud)

界面投影:

public interface TestClass {
  @Convert(converter = MyCustomTypeConverter.class)
  MyCustomType getCustomType();
}
Run Code Online (Sandbox Code Playgroud)

转换器:

@Converter
public class MyCustomTypeConverter implements Converter<String, MyCustomType> {

      @Override
      public MyCustomType convert(String source) {
        // whatever
      }
}
Run Code Online (Sandbox Code Playgroud)

当我在存储库上调用 getResults() 时,我会按预期收到结果列表,但是当我尝试对其中一个结果调用 getCustomType() 时,出现异常:

java.lang.IllegalArgumentException: Projection type must be an interface!
at org.springframework.util.Assert.isTrue(Assert.java:118)
at org.springframework.data.projection.ProxyProjectionFactory.createProjection(ProxyProjectionFactory.java:100)
at org.springframework.data.projection.SpelAwareProxyProjectionFactory.createProjection(SpelAwareProxyProjectionFactory.java:45)
at org.springframework.data.projection.ProjectingMethodInterceptor.getProjection(ProjectingMethodInterceptor.java:131)
at org.springframework.data.projection.ProjectingMethodInterceptor.invoke(ProjectingMethodInterceptor.java:80)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
at org.springframework.data.projection.ProxyProjectionFactory$TargetAwareMethodInterceptor.invoke(ProxyProjectionFactory.java:245)
Run Code Online (Sandbox Code Playgroud)

我发现问题出在

org.springframework.data.projection.ProxyProjectionFactory
Run Code Online (Sandbox Code Playgroud)

它使用

org.springframework.core.convert.support.DefaultConversionService
Run Code Online (Sandbox Code Playgroud)

这显然没有注册我的自定义类型转换器。

如果我在 ConversionService 中的断点处停止并在运行时手动添加我的转换器,投影将正常工作。 …

java projection converters nativequery spring-data-jpa

6
推荐指数
1
解决办法
2324
查看次数