HIbernate:分离父母和所有孩子

时间:2012-06-30 13:38:01

标签: java hibernate nhibernate orm

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

Foo->(多)酒吧,>巴兹

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

有没有一种方法可以不用遍地爬树?或者在原始查询中是否有一种方法可以加载Foo以表示不应该附加任何返回的对象?

1 个答案:

答案 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