谁能告诉我这段代码有什么区别:
// 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/