проблема циклических ссылок в спящем режиме - PullRequest
0 голосов
/ 17 января 2011

Во время изучения 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();

Теперь здесь кроется настоящая проблема, когда я буду пытаться итерировать список с помощью метода итератора или любого метода сбора, который входит в бесконечный цикл, как родительский объект ссылаетсяchild и снова child имеют ссылку на parent

в моем предстоящем задании у меня есть родительский класс, имеющий так много ссылок на коллекции для дочерних классов, которые имеют отношение многие-к-одному и один-ко-многим.

Таким образом, кажется, что в этом состоянии, когда бы я ни пытался извлечь дочерний элемент из родительской сущности, такой как

parent.getChild().iterator()

, он прибегнет к циклической ссылке.Пожалуйста, предложите мне, как избежать этого или исправить меня, если я на неправильном пути

1 Ответ

0 голосов
/ 17 января 2011

Из того, что я понял, у вас такая ситуация:

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

В этом случае у вас есть циклическая ссылка для идентификаторов 2 и 4. Это «классическая» проблема для связанных списков, и есть несколько методов (алгоритмов), чтобы обнаружить это. Возможно, вы захотите провести некоторое исследование по этой теме, так как оно действительно не подходит для ответа stackoverflow; -)

Но я бы сначала оценил, действительно ли бизнес-требование обязывает иметь структуру с возможностью циклической зависимости. Если это не так, то вы можете поместить «check» в ваш метод «addChild ()» или «setParent ()», чтобы проверить, создает ли родитель / потомок циклическую зависимость. Простое решение - всегда требовать «parent = null» для родительской записи верхнего уровня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...