这个警告通常在你升级 Hibernate 后会出现,主要是提示你应该使用 JPA 来进行查询。

警告信息如下:

HHH90000022: Hibernate's legacy org.hibernate.Criteria API is deprecated; use the JPA javax.persistence.criteria.CriteriaQuery instead

老的查询方式

考察下面的代码:
Factory.getSession().createCriteria(classArg);

上面的代码是获得一个 Session 后创建 createCriteria 来进行查询。

如果你查看 createCriteria 这个方法的源代码的话。

上面提示这个查询方法将会逐步被丢弃。

因此不建议你继续使用。

考察下面的代码,我们是来从一个实体对象中进行查询。

            Criteria cr = Factory.createCriteria(MlsListing.class);cr.add(Restrictions.ge("dateM", new DateTime().minusDays(100).toDate()));cr.addOrder(Order.desc("dateM"));

上面的代码是首先通过实体创建一个 Criteria,然后再设置查询条件。

如果使用 JPA 的话就不能这样写了。

JPA 写法

与上面对应的是 JPA 的写法。

完整的代码如下:

            CriteriaBuilder builder = Factory.getSession().getCriteriaBuilder();CriteriaQuery<MlsListing> criteriaQuery = builder.createQuery(MlsListing.class);Root<MlsListing> root = criteriaQuery.from(MlsListing.class);criteriaQuery.select(root);criteriaQuery.where(builder.greaterThan(root.get("dateM"), new DateTime().minusDays(100).toDate()));
//            criteriaQuery.where(builder.greaterThan(root.get(MlsListing_.DATE_M), new DateTime().minusDays(100).toDate()));Query query = Factory.getSession().createQuery(criteriaQuery);query.setMaxResults(1000);mlsListingList = query.getResultList();

代码解读

  1. 需要从 Session 中获得 CriteriaBuilder 实例
  2. 从 CriteriaBuilder 实例中创建 CriteriaQuery
  3. 从 CriteriaQuery 中创建 Root 实例
  4. 将 root 实例返回设置到 CriteriaQuery 中
  5. 在 CriteriaQuery 中创建 Where,Order 等条件
  6. 从 Session中获得 Query 实例,在创建这个 Query 实例的时候需要 CriteriaQuery 才可以创建。
  7. 为 Query 设置返回参数集
  8. 执行查询

如果单纯的从步骤的角度来说,上面的过程更加复杂了。

原因有,从 Session 中需要获得 CriteriaBuilder 和 Query 2 个实例。

CriteriaQuery 的创建需要实体。

CriteriaQuery 需要解决 2 个问题,从哪里去查询,实际上是从 Root 去查询,这个是 select 这个语句表达的。

查询条件是什么,这个是 where 语句表达的。

因为是 从 Root 里面查,所以需要设置 Root 对象,root 对象又是从 criteriaQuery 中的 from 来的。

正是因为上面的问题,才导致这个 JPA 查询有点绕。

总结

对 JPA 的查询我们进行一个小总结。

查询的基础是从 session 中运行 Query 语句。

第一步,从 Session 中创建 CriteriaBuilder ,这个不需要实体类。

第二步,从 CriteriaBuilder 的实例中创建 CriteriaQuery,这个需要实体类,同时解决从哪里查(Root)和 怎么查的问题(Select 和 Where)

第三步,执行查询,这个步骤需要从 Session 中创建 Query ,并且执行 CriteriaQuery 的实例。

通过上面 3 个步骤是不是更加容易帮助你理解了呢?

Hibernate 的 HHH90000022 警告 - Java - OSSEZ

Hibernate 的 HHH90000022 警告相关推荐

  1. (12) Hibernate+EhCache配置二级缓存

    转载地址 http://jyao.iteye.com/blog/1315726 (有关EhCache的基础介绍可参见:http://sjsky.iteye.com/blog/1288257 ) 本文主 ...

  2. java 实体类 临时注解_JPA:Java持久层API--配置流程

    一.JPA概述 1.1 JPA是什么 JPA (Java Persistence API) Java持久化API.是一套Sun公司 Java官方制定的ORM 方案,是规范,是标准 ,sun公司自己并没 ...

  3. 国产数据库人大金仓踩坑记录和函数适配

    文章目录 总体介绍 注意事项(踩的坑) 函数适配(持续更新) 技巧 总体介绍 人大金仓,是国产数据管理软件与服务提供商.主要服务于电子政务.党务.国防军工.金融.智慧城市.企业信息化等行业.在北京.上 ...

  4. java sqlexception_java.sql.SQLException

    java.sql.SQLException: ResultSet is closed是什么错误 java.sql.SQLException:ResultSetisclosed是什么错误 java.sq ...

  5. JPA---Java持久层API

    JPA讲义 Java持久层API   目  录 1      JPA概述................................................................ ...

  6. Hibernate 和 JPA

    Hibernate 在 5 以后的版本中全面推进使用 JPA 的查询语法,甚至准备废弃掉自己已有的查询语法. 什么是 JPA JPA 全称为 Java Persistence API ,Java 持久 ...

  7. mybatis与mysql的优点_mybatis和hibernate比较_区别_优缺点

    前言 Hibernate与Mybatis都是流行的持久层开发框架,但Hibernate开发社区相对多热闹些,支持的工具也多,更新也快,当前最高版本4.1.8.而Mybatis相对平静,工具较少,当前最 ...

  8. Spring ORM数据訪问——Hibernate

    Hibernate 我们将首先介绍Spring环境中的Hibernate 5.然后介绍使用Hibernate 5来演示Spring集成O-R映射器的方法. 本节将具体介绍很多问题,并显示DAO实现和事 ...

  9. Hibernate用Mysql数据库时链接关闭异常的解决

    在一个项目中,客户要求除操作系统外全部使用免费软件,因此我使用了Mysql 4.0作为数据库服务器,其JDBC驱动为3.0.9版本,在给客户安装后调试一切正常.可是到了第二天,只要一登录就提示&quo ...

  10. 浅析 Mybatis 与 Hibernate 的区别与用途

    有很长一段时间对mybatis是比较陌生的,只知道与Hibernate一样是个orm数据库框架.随着使用熟练度的增加,发现它与Hibernate区别是非常大的,应当结合不同的情况分析选用.结合至今为止 ...

最新文章

  1. 计算机专插本专业考哪些科目,2020年广东专插本要考什么?专插本考试科目有哪些?...
  2. throw throws 区别
  3. 6.2 常见多媒体标准及压缩技术
  4. 开源创新的理念_开源如何解决创新问题
  5. DNW启动异常的问题
  6. oracle xsql详解(二)
  7. 关于try...catch...finally中return的疑惑
  8. python学习之课后习题
  9. 收到控制台警告:当我在iOS13.2中加载WKWebView时,[Process] kill() returned unexpected error 1
  10. [C/C++]如何在ARM环境下进行开发
  11. 慧荣SM2259XT主控贴镁光B27A测试分享,SM2258XT、SM2259XT2可参考
  12. 【YBT2022寒假Day1 B】方格填写(插头DP)
  13. Socket 服务器和客户端交互
  14. 爱老虎油和你探索flash中的对象
  15. 腾讯微云 for Mac v
  16. 学习方法和学习经验总结
  17. ABP 部署遇到的问题(记录)
  18. python中列表概念,Python 列表的简单介绍
  19. Liunx系统格式化磁盘和挂载备份盘
  20. ATTCK红日靶场二

热门文章

  1. Zigbee和WiFi的信道重叠
  2. cocos2d-x打印log
  3. P2P继续停止...
  4. 和菜鸟一起学android4.0.3源码之硬件gps简单移植
  5. Spring MVC 接口返回406错误
  6. Could not resolve type alias 解决方法
  7. 车架号 生成 java_JAVA匹配车架号以及生成虚拟车架号
  8. cocos2d 物理平抛,斜抛运动
  9. 普度大学计算机科学博士,Top15普渡大学计算机博士全奖录取
  10. 个人网站首页设计模板