2010-12-09 44 views
1

合并和检索的孩子我有一个模型,看起来像这样:使用Hibernate

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

两个ABAll的CascadeType的和Lazy FetchType。

当我做以下电话:

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

mergedAB对象的集合解决。 B但是没有解决对象集合C

如果我提出以下电话:

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

mergedBC对象的集合解决。

如果同时ABAll的CascadeType的,为什么C对象的集合未得到解决为B S中的集合时,我打电话session.merge(a);

+0

`FetchType`在这里扮演什么角色? – 2010-12-09 03:53:20

+0

我不认为它会起到作用。我只是记下它,以防万一有人想要更多关于我的注释/属性的信息。 – digiarnie 2010-12-09 04:19:47

回答

1

它的原因在于,它在对象图中单步执行,C正处于第二步。因此,它只是为了直接的。

1

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

作为一个概念的传递持久性适用于您想要从父母传递给孩子的逻辑操作。所以关于“你删除了一位父母,并且应该把孩子串联起来?” - 它关于你想要的对象关系中的语义。

lazy vs non lazy是一个持久性实现细节。所以它的全部内容是“作为一个持久层来加载这个东西吗?” - 关于如何优化持久层。

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