使用Hibernate合并和检索子项

时间:2010-12-09 03:22:23

标签: java hibernate jpa

我的模型看起来像这样:

A -- Many-toMany --> B -- Many-toMany --> C

AB的CascadeType均为All,FetchType为Lazy

当我拨打以下电话时:

A mergedA = (A) session.merge(a);

mergedA已解析B个对象的集合。但是B没有解析其C个对象的集合。

如果我拨打以下电话:

B mergedB = (B) session.merge(b);

mergedB已解析C个对象的集合。

如果AB的CascadeType都为All,为什么C对象的集合无法解析为B s的集合当我打电话给session.merge(a);时?

2 个答案:

答案 0 :(得分:1)

我认为它是因为级联与传递持久性有关,而与懒惰与非懒惰无关。

传递持久性作为一个概念适用于您希望从父母“转移”到子女的逻辑操作。所以关于“你删除了一个父母,是否应该级联到孩子们?” - 它关于你在对象关系中想要的语义。

lazy vs non lazy是一个持久性实现细节。所以关于“我作为持久层现在加载这个东西吗?” - 关于如何优化持久层。

作为一个注释,我想知道这是否是一个正确的合并应用程序。合并是用于在会话中已经具有相同id的对象时将分离的对象重新附加到会话。我有点惊讶它正在装载孩子们。

答案 1 :(得分:1)

因为,它是在对象图中的单步深处完成的,C是第二步。因此,它只针对眼前的那个。