我有一个像这样的对象树:
Foo->(多)酒吧,>巴兹
我想让它们都是短暂的,但是在Foo上调用分离只能分离Foo。我也不想清除会话,因为会话中可能还有其他内容需要保留。
有没有一种方法可以不用遍地爬树?或者在原始查询中是否有一种方法可以加载Foo以表示不应该附加任何返回的对象?
答案 0 :(得分: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