【问题标题】:cyclic reference problem in hibernatehibernate中的循环引用问题
【发布时间】:2011-01-17 09:43:44
【问题描述】:

在学习 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()

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

【问题讨论】:

    标签: java hibernate hibernate-mapping


    【解决方案1】:

    据我了解,你的情况是这样的:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-12
      • 2010-12-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多