1

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

Foo->(Many)Bar->Baz

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

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

4

1 回答 1

0

Hiberante 的分离方法就是这样做的:

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

于 2012-06-30T13:58:15.543 回答