我有一个像这样的对象树:
Foo->(Many)Bar->Baz
我想让它们都是瞬态的,但在 Foo 上调用 detach 只会分离 Foo。我也不想清除会话,因为会话中可能还有其他需要保留的内容。
有没有办法不用爬满树?或者在加载 Foo 的原始查询中是否有办法说不应该附加任何返回的对象?
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