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

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

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

【问题讨论】:

    标签: hibernate


    【解决方案1】:

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

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

    【讨论】:

    • 请注意,使用代理调用delete() 以获取数据库中不存在的对象将导致ObjectNotFoundException,就像您尝试访问代理的属性一样。
    • This answer 很好地解释了get()load() 之间的区别。
    猜你喜欢
    • 2011-03-26
    • 2012-06-12
    • 2010-09-29
    • 2011-03-14
    • 2012-07-15
    • 2011-09-22
    • 2018-10-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多