java - Hibernate 中的 query.uniqueResult() 与 session.load() 有什么区别?

标签 java hibernate

谁能告诉我这段代码有什么区别:

// This following method checks if there is an open session
// and if yes - returns it,  if not - opens a new session. 
Session session = getSession();
Query query = session.createQuery("from Entity e where e.id = 1");
Entity object = (Entity)query.uniqueResult(); 

还有这个:

 Session session = getSession();
 Entity object = (Entity)session.load(Entity.class, new Integer(1));


第一个方法是否返回代理对象?如果我再次调用它,它会访问数据库吗?

最佳答案

存在一些差异(从 Hibernate 5.2.6 开始)。

session.load()

  • 它仅在假定实体存在的情况下按 id 进行搜索
  • 它总是会返回一个“proxy”(Hibernate 术语)而不访问数据库。在 Hibernate 中,proxy 是一个具有给定标识符值的对象,它的属性还未初始化,它看起来只是一个临时的假对象。
  • 仅使用它来检索您假定存在的实例,其中不存在将是 ObjectNotFoundException


query.uniqueResult()

  • 复杂的条件可以查询,不能只通过id查询
  • 返回与查询匹配的单个实例的便捷方法,如果查询未返回任何结果,则返回 null
  • 它将根据 FetchType 返回一个实体及其集合是否初始化

关于java - Hibernate 中的 query.uniqueResult() 与 session.load() 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41546166/

相关文章:

java - 可点击的 ListView

java - 调用init方法失败;嵌套异常是 org.hibernate.AnnotationException : No identifier specified for entity

java - 如何将一对一 hibernate 实体映射到一对多数据库结构?

java - 多次搜索导致 OutOfMemoryError

hibernate - Spring-Data JPA 与 Multi-Tenancy Hibernate

java - hibernate 恩弗斯 : Get REVEND_TSTMP from revision entity

java - TextView 的中心重力在relativelayout 中的 xxhdpi 上不起作用

java - 噪声产生 : 'Room Noise'

java - 迁移到 Grails 5.1.1 后速度缓慢 - GrailsControllerUrlMappingInfo 上花费的时间

java - 干净的代码 - 避免对基于通用数据类型构建的集合进行显式类型转换