【问题标题】:HIbernate: Detach parent and all children休眠:分离父母和所有孩子
【发布时间】:2023-03-28 01:46:01
【问题描述】:

我有一个像这样的对象树:

Foo->(Many)Bar->Baz

我想让它们都是瞬态的,但在 Foo 上调用 detach 只会分离 Foo。我也不想清除会话,因为会话中可能还有其他需要保留的内容。

有没有办法不用爬满树?或者在加载 Foo 的原始查询中是否有办法说不应该附加任何返回的对象?

【问题讨论】:

    标签: java hibernate orm


    【解决方案1】:

    Hiberante 的 detach 方法就是这样做的:

    public void detach(Object entity) {
        try {
            getSession().evict( entity );
        }
        catch ( HibernateException he ) {
            throw convert( he );
        }
    }
    

    它或多或少像:您已经拥有该对象,因此,让我们将其从会话中逐出,使其分离。你可以做的是在这个属性上级联EVICT,所以当Foo被驱逐时,Bar也会被驱逐,Baz也是如此。为了避免LazyInitializationException,您需要保证它们都已加载(也许FetchType EAGER?)


    对于 3.5,您有 CascadeType DETACH,可用于此目的:http://docs.jboss.org/hibernate/orm/3.5/api/org/hibernate/annotations/CascadeType.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-22
      • 2018-01-29
      相关资源
      最近更新 更多