休眠:分离没有级联到集合

Posted

技术标签:

【中文标题】休眠:分离没有级联到集合【英文标题】:Hibernate: Detach is not cascaded to collection 【发布时间】:2013-01-19 13:45:27 【问题描述】:

我目前正在对使用 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】:

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

【讨论】:

以上是关于休眠:分离没有级联到集合的主要内容,如果未能解决你的问题,请参考以下文章

休眠:是不是可以仅在测试时“保存级联”?

休眠删除的对象将被级联重新保存

休眠级联持续存在:执行隔离工作时出错

休眠级联删除期间的ConstraintViolationException

休眠 - 多对多关系中的级联删除

JPA Merge 和 Remove 不会同时级联到子对象