这个警告通常在你升级 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. 在DataGrid中显示图片
  2. sql查两个时间内的数据_如何通过AWR的sql脚本查执行时间、消耗CPU、gets、I/0等的sql?...
  3. Java语言程序设计(基础篇)第七章(2 18 34)
  4. 20170914-构建之法:现代软件工程-阅读笔记
  5. ssm中java实现树状结构_java ssm使用递归写树形结构
  6. 二元相图软件_Materials Studio 领先的材料模拟软件
  7. sphinx 字符串转html,在Pycharm中获取Sphinx,以将我的文档字符串包含在生成的html中...
  8. 拼多多回应“鼓励刷单”:文章描述有歧义 已删除
  9. matlab练习程序(共生矩阵)
  10. AD RMS高可用(四)添加rms成员服务器
  11. PointTrackNet:一种用于点云三维目标检测和跟踪的端到端网络
  12. ubuntu mysql 升级_Ubuntu 升级mysql 之后的一些问题
  13. 答题小程序 服务器,开源的基于云开发的在线答题小程序
  14. ipad mini2 进入DFU模式
  15. O2O营销模式的核心是什么 O2O模式下便利店有哪些特点?
  16. Android ViewGroup介绍+实例
  17. 桌面扫码点餐系统(小程序+Java后台)
  18. 创建系统映像时包含了 D、E 盘
  19. python读取文件名或路径含中文字符的图片并从中筛选出全白或者全黑的图片
  20. 万字长文详解 Go 程序是怎样跑起来的?| CSDN 博文精选

热门文章

  1. hive数据库无主键进行去重SQL
  2. 1、51单片机——郭天祥课后习题解答
  3. 职高计算机专业个人鉴定范文大全,职高个人自我鉴定300字左右
  4. 找出大于200的最小的质数
  5. [Unity]使用状态机模式创建平台控制游戏(以Unity酱为例)
  6. 微信收藏保存服务器,微信的收藏和保存功能有啥区别?
  7. linux操作系统中ssh的默认端口号,sshd服务的默认端口号
  8. NetWare网络操作系统
  9. 苹果手机壳_手机壳推荐:iPhone12手机壳苹果保护壳平价个性推荐
  10. 公众号吸粉实操之qq群吸粉