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() 哪个更快?的主要内容,如果未能解决你的问题,请参考以下文章