0

在学习hibernate时,我遇到了一种情况,Hibernate似乎有循环引用,我不知道如何度过这种情况。我有两个班级的父母

private String uuid;
private String name;
private Set<ChildClass> childclass=new HashSet<ChildClass>();

这是相同的映射文件

<property name="name" type="string" column="NAME" length="255" />
    <set name="childclass" table="Parent_Child" lazy="extra"
        cascade="save-update">
        <key column="parent_id" />
        <many-to-many class="com.test.child.ChildClass" column="child_id"/>
    </set>

子条目如下

private String name;
private Set<ParentClass> parent=new HashSet<ParentClass>();
private String child_id;

<property name="name" type="string" column="NAME" length="255" />
    <set name="parent" table="Parent_Child" inverse="true" lazy="extra"
        cascade="save-update">
        <key column="child_id"/>
        <many-to-many class="com.test.parent.ParentClass" column="PARENT_ID"/>
    </set>

当我在我的主要代码中尝试这样的事情时

tx1.begin();
String query="from ParentClass as pc";
Query query1=session1.createQuery(query);
List list= query1.list();

现在,当我尝试使用迭代器方法或任何进入无限循环的集合方法来迭代列表时,真正的问题就在这里

在我即将到来的作业中,我有一个父类,它有这么多对子类的集合引用,它们都具有多对一和一对多的关系。

因此,似乎在那种情况下,我会尝试从父实体中获取子实体,例如

parent.getChild().iterator()

它将运行到循环引用。如果我走错了路,请建议我如何避免这种情况或纠正我

4

1 回答 1

0

据我了解,您的情况如下:

ID | name | parent
1  | P1   | null
2  | P2   | P4
3  | P3   | P2
4  | P4   | P2

在这种情况下,您有一个循环引用,用于 ID 2 和 4。这是链表的“经典”问题,有几种技术(算法)可以检测到这一点。您可能想对该主题进行一些研究,因为它确实不适合 stackoverflow 答案;-)

但我会首先评估业务需求是否真的要求有一个可能存在循环依赖的结构。如果没有,那么您可以在您的“addChild()”或“setParent()”方法中放置一个“检查”,以验证父/子是否创建了循环依赖。简单的解决方案是始终要求顶级父记录使用“parent = null”。

于 2011-01-17T11:09:31.507 回答