相关疑难解决方法(0)

在Hibernate中persist()vs save()的优点是什么?

谁能告诉我在Hibernate 中persist()vs 的优势是save()什么?

java hibernate

159
推荐指数
8
解决办法
19万
查看次数

Hibernate 3.6 - session.get()vs session.load()

我试图了解Hibernate 3.6 session.get()和Hibernate 3.6的返回对象和行为的区别session.load().

来自javadoc:

得到():

返回给定实体类的持久实例和给定标识符,如果没有这样的持久实例,则返回null.(如果实例已与会话关联,则返回该实例.此方法永远不会返回未初始化的实例.)

加载():

假定实例存在,返回给定实体类的持久实例和给定标识符.当访问非标识符方法时,此方法可能会返回按需初始化的代理实例.

我有三个问题:

  1. javadoc没有说什么时候load()可能会返回一个代理 - 有没有办法提前知道它?

  2. load()返回代理-这意味着load()没有访问数据库,对吗?那么如果我提供load()了数据库中不存在的标识符呢?我现在将在会话中拥有一个具有无效ID的代理(没有获得异常).现在我想让另一个持久化实例指向该代理 - 它会起作用吗?对于这种情况,我不需要初始化代理,我只需要它的id(即使它是无效的,因为它不在数据库中).所以我想我问的是我的描述是否正确,并且我总是需要load()在返回的对象之后签出,isInitialized()以确保它代表一个有效的实体(或至少是一个有效的代理),即具有有效的ID.

  3. 此外,如果load()返回代理会发生什么- 所以代理是已经与会话关联的实例.然后根据以下描述get():"如果实例已经与会话关联,则返回该实例." - 那么get()返回代理吗?因为根据以下描述get():"此方法永远不会返回未初始化的实例."

谢谢!

UPDATE

以下是否正确?

(A)我认为两者load()get()会首先尝试才去DB检查会话缓存-所以它不会是正确的说,任何人总是打DB或总是返回的代理.

(B)初始化代理与原始实例不同,您可以在此处阅读:http://blog.xebia.com/2008/03/08/advanced-hibernate-proxy-pitfalls/

orm hibernate java-ee

10
推荐指数
1
解决办法
1万
查看次数

在Hibernate中query.uniqueResult()和session.load()之间有什么区别?

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

// 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(); 
Run Code Online (Sandbox Code Playgroud)

还有这个:

 Session session = getSession();
 Entity object = (Entity)session.load(Entity.class, new Integer(1));
Run Code Online (Sandbox Code Playgroud)


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

java hibernate

6
推荐指数
1
解决办法
2万
查看次数

hibernate createQuery vs get

没有什么优势get有过createQuery

我可以看到,不必解析HQL可能会有轻微的性能提升,但使用get over createQuery还有其他主要优势吗?

java hibernate

4
推荐指数
1
解决办法
1358
查看次数

标签 统计

hibernate ×4

java ×3

java-ee ×1

orm ×1