Hibernate:Detach不会级联到集合

时间:2013-01-19 13:45:28

标签: hibernate session cascade detach

我目前正在使用Hibernates分离对象作为DTO进行一些测试。但我有一个问题,即父bean的分离没有级联到父bean集合中包含的bean(虽然设置了CascadeType.ALL)。

例如,我有一个父类包含一组属性,这些属性具有属性类型的外键。我用以下方式阅读:

Parent bean = (Parent) session.createCriteria(Parent.class)
    .add(Restrictions.eq("id", 1223215031850009727l))
    .setFetchMode("attributes", FetchMode.JOIN)
    .createAlias("attributes.type", "attributetype")
    .uniqueResult();

读完bean之后,我将其从会话中分离出来:

session.evict(bean);

之后我输出一些数据:

System.out.println(bean.getName());
for (Attribute attr : bean.getAttributes()) {
    System.out.println(attr.getName());
    System.out.println(attr.getType().getName());
}

到目前为止,一切都按预期进行。但是,如果我从bean的加载中删除“createAlias”,我希望在访问属性类型时出错,因为它也应该从会话中分离(属性映射包含CascadeType.ALL)。而不是错误hibernate触发SQL加载类型。

为什么属性没有从会话中分离出来?

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。 Cascade(至少是DETACH)也必须在外键属性上设置。