get() 还是 merge() 哪个更快?

Posted

技术标签:

【中文标题】get() 还是 merge() 哪个更快?【英文标题】:Which is faster, get() or merge()? 【发布时间】:2014-05-16 17:19:21 【问题描述】:

我有一个从 DTO 转换为要删除的休眠对象。因为这个对象没有附加到 Session 我不能直接删除它,它会导致一个NotUniqueObjectException,所以我需要要么合并它,要么在 Session 中找到等效的对象。 Session.get()Session.merge() 哪个更快?

更好的是,有没有办法在不先从 Session 中获取托管对象的情况下删除对象?

【问题讨论】:

【参考方案1】:

merge() 基本上是获取对象,然后将状态从分离实例复制到附加实例,并应用级联。所以很明显,要获取一个对象,get() 不仅更快,而且更合适。

使用session.load() 可以在不查询数据库的情况下获取附加的实例,如果会话尚未包含对象,则返回未初始化的代理。

【讨论】:

请注意,使用代理调用delete() 以获取数据库中不存在的对象将导致ObjectNotFoundException,就像您尝试访问代理的属性一样。 This answer 很好地解释了get()load() 之间的区别。

以上是关于get() 还是 merge() 哪个更快?的主要内容,如果未能解决你的问题,请参考以下文章

哪个更快:多行还是多列?

哪个更快?组合查询还是多个查询?

哪个更快,水平计数还是垂直计数?

哪个更快? ++、+= 还是 x + 1?

charAt() 还是子字符串?哪个更快?

哪个更快:JDBC 还是 JNDI?