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

时间:2017-01-09 10:43:30

标签: java hibernate

任何人都可以告诉我这段代码之间的区别:

DeleteById

和此:

// 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(); 


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

1 个答案:

答案 0 :(得分:10)

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

session.load()

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


query.uniqueResult()

  • 您可以使用复杂条件查询,而不仅仅是id
  • 返回与查询匹配的单个实例的便捷方法,如果查询未返回任何结果,则返回null
  • 它将返回一个实体,其集合已初始化或取决于 FetchType