资讯专栏INFORMATION COLUMN

使用JPA查询数据库遇到的两个问题

madthumb / 949人阅读

摘要:使用的在使用方法时,这个方法进行了重载,我经常使用的两个方法分别为这两个方法的区别是第二个方法查询之后可以强转为相应的类传入的例如而如果使用第一个方法,将无法强转,这时候查询得到的数据为的,例如注其实这个查询可以通过配置映射关系简化第二个问

使用EntityManager的createNativeQuery

在使用createNativeQuery方法时,这个方法进行了重载,我经常使用的两个方法分别为

createNativeQuery(String sql)

createNativeQuery(String sql,Class aClass)

这两个方法的区别是第二个方法查询之后可以强转为相应的类(传入的class),例如:

Query query = em.createNativeQuery("select * from trainingclass 
    where id in (select distinct classid from classunsubscribe where traineeId=""+traineeId+"")"
    ,TrainingClass.class);
List classes = query.getResultList();

而如果使用第一个方法,将无法强转,这时候查询得到的数据为object[]的list,例如:

Query query = em.createNativeQuery(
   "select t.*,c.date reserveDate,c.isLearned from trainingclass t,
    classreserve c where t.id=c.classid AND t.id in" +
   "(select distinct classid from classreserve c1 where c1.traineeId=""+traineeId+"")");
List classes = query.getResultList();
List results = new ArrayList<>(classes.size());
for (int i = 0; i < classes.size(); i++) {
    Object[] obj = (Object[]) classes.get(i);
    ReserveStatistics temp = new ReserveStatistics((int)obj[0],String.valueOf(obj[1]),
        String.valueOf(obj[2]),String.valueOf(obj[3]),String.valueOf(obj[4]),
        (double)obj[5],String.valueOf(obj[6]),String.valueOf(obj[8]),(int)obj[9]);
    results.add(temp);
}
return results;

(注:其实这个查询可以通过配置映射关系简化)

第二个问题

在使用原生的sql语句进行查询时,如果查询语句设计多张表,而多张表又有取名相同的字段,则需要为相同的字段取一个别名,如

select t.*,c.date reserveDate,c.isLearned from trainingclass t, classreserve c

这边因为trainingclass表中有属性和classreserve 表中有一个取名相同的字段date,所以需要给其中一个“重命名”,否则会出现
org.hibernate.loader.custom.NonUniqueDiscoveredSqlAliasException错误

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/66775.html

相关文章

  • 使用SpringData+JPA@Query注解完成动态条件分页查询

    摘要:正文公司使用的是现在流行的,数据库方面使用的是。这几天用的最多的就是用进行查询了,简单的查询很简单,网上查一查就有一堆方案,直到遇到分页查询的时候出了问题。 写作原因 之前在学校都是做前端,但是最后找了个Java后端的工作,框架什么的基本没用过,所以工作中遇到了很多问题,所以决定记录下来工作中遇到的问题,记录成长的点滴。 正文 公司使用的是现在流行的SpringBoot,数据库方面使用...

    melody_lql 评论0 收藏0
  • Spring Boot+SQL/JPA实战悲观锁和乐观锁

    摘要:所以悲观锁是限制其他线程,而乐观锁是限制自己,虽然他的名字有锁,但是实际上不算上锁,只是在最后操作的时候再判断具体怎么操作。悲观锁和乐观锁比较悲观锁适合写多读少的场景。 最近在公司的业务上遇到了并发的问题,并且还是很常见的并发问题,算是低级的失误了。由于公司业务相对比较复杂且不适合公开,在此用一个很常见的业务来还原一下场景,同时介绍悲观锁和乐观锁是如何解决这类并发问题的。 公司业务就是...

    Keven 评论0 收藏0
  • JPA多表复杂查询

    摘要:我将举几个栗子,来详细的说一下我自己在使用多表复杂查询的场景和想法。名字手机号这是一个单表的多条件复杂查询,由于是在几个属性中进行筛选,其中的属性的个数不知道有多少个,所以只需要利用查询就可以很方便的实现这个需求。 最近工作中由于要求只能用hibernate+jpa 与数据库进行交互,在简单查询中,jpa继承CrudRepository接口 ,然后利用jpa的方法命名规范进行jpql查...

    chaos_G 评论0 收藏0

发表评论

0条评论

madthumb

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<