Hibernate головоломка картирования - PullRequest
3 голосов
/ 23 марта 2011

Я пытаюсь сопоставить класс

Class Node {
Node parent;
List<Node> children;
}

Я пробовал различные комбинации «многие к одному» и «один ко многим», но, похоже, ничего не работает. Я бы вставил свой файл сопоставления, но я пробовал так много вещей, что понятия не имею, какой из них вставить. Пожалуйста, помогите мне :( Также мне удалось сопоставить класс, если я использовал SET вместо LIST, но когда я использую список, я не могу обновить столбец, используемый для хранения индекса списка. Большое спасибо .

1 Ответ

2 голосов
/ 23 марта 2011

Вы не можете обновить индекс списка напрямую, потому что он получен путем изучения того, где находится объект в дочернем списке родителя. Если объект был в списке с индексом 10, а для свойства list-index было установлено значение 5, что должен использовать Hibernate?

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

Но если вы хотите отобразить свойство list-index на свой объект, чтобы иметь прямой доступ к нему (только для чтения, например, getIndexInList()), вы должны сопоставить его с insert=false update=false.

Я немного разбираюсь в отображении XML, но здесь есть кое-что, что, по моему мнению, сработает. Дайте мне знать, если у вас есть проблемы и какое сообщение об ошибке вы получите.

<hibernate-mapping>
 <class name="com.example.Node" table="node">
    <id name="id" column="nodeId">
        <generator class="native"/>
    </id>

    <property
        name="listIndex"
        column="listIndex"
        insert="false"
        update="false" />

    <many-to-one
        name="parent"
        column="parentNodeId"
        class="com.example.Node"/>

    <list name="children" inverse="true" cascade="all">
        <key column="parentNodeId"/>
        <list-index column="listIndex"/>
        <one-to-many class="com.example.Node"/>
    </list>

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