Как настроить отображение «один ко многим» объектов List по XML без индексного столбца - PullRequest
4 голосов
/ 18 мая 2011

Я могу настроить отображение «один ко многим» объектов List с помощью аннотаций, однако использование XML - нет.Не могли бы вы рассказать мне, как настроить с помощью XML-сопоставления.Любая помощь будет оценена.

Вопрос.Нужен ли столбец «ИНДЕКС», когда я связываю некоторые объекты List с помощью сопоставления XML?

сопоставление аннотаций -> Это работает, как и ожидалось:

@Entity
@Table(name = "ITEM")
public class Item {

    @Id
    @Column(name = "ID")
    private Long id;

    @Column(name = "NAME")
    private String name;

    @OneToMany(targetEntity = ItemDetail.class)
    @JoinColumn(name = "ITEM_ID")
    private List<ItemDetail> itemDetails;

@Entity
@Table(name = "ITEM_DETAIL")
public class ItemDetail {

    @Id
    @Column(name = "ID")
    private Long id;

    @Column(name = "NAME")
    private String name;

    @Column(name = "ITEM_ID")
    private Long itemId;

Отображение XML -> Это не работаетожидается.Произошла ошибка «Ошибка синтаксического анализа XML».Кажется, нужна информация о «колонке ИНДЕКС»:

<hibernate-mapping>
    <class name="jp.sample.entity.Item" table="ITEM">
        <id name="id" type="java.lang.Long">
            <column name="ID" />
            <generator class="identity" />
        </id>
        <property name="name" type="string">
            <column name="NAME" />
        </property>

        <list name="itemDetails" cascade="all">
            <key column="ITEM_ID" />
            <one-to-many class="jp.sample.entity.ItemDetail" />
        </list>

    </class>
</hibernate-mapping>

<hibernate-mapping>
    <class name="jp.sample.entity.ItemDetail" table="ITEM_DETAIL">
        <id name="id" type="java.lang.Long">
            <column name="ID" />
            <generator class="identity" />
        </id>
        <property name="name" type="string">
            <column name="NAME" />
        </property>
        <property name="itemId" type="java.lang.Long">
            <column name="ITEM_ID" />
        </property>
    </class>
</hibernate-mapping>

1 Ответ

7 голосов
/ 18 мая 2011

A <list> в XML-файле Hibernate Mapping требуется <list-index>, поскольку вы сообщаете Hibernate, что вы хотите отобразить упорядоченную коллекцию .

Если вас не волнует положение элементов в коллекции, вы должны использовать <bag> или изменить тип коллекции в классе Java на Set, <set>:

Если в вашей таблице нет столбца индекса, и вы все еще хотите использовать List в качестве типа свойства, вы можете сопоставить свойство как Hibernate <bag>. Сумка не сохраняет свой порядок при извлечении из базы данных, но при желании ее можно отсортировать или заказать.

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