我目前正在对使用 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)。而不是错误,休眠会触发 SQL 来加载类型。
为什么属性没有从会话中分离出来?