Карта ArrayList с Hibernate - PullRequest
       0

Карта ArrayList с Hibernate

1 голос
/ 01 декабря 2010

Я только что написал свои первые примеры Hibernate.

Соединение с базой данных работает, и я понимаю, как я могу сопоставить строку из POJO с полем базы данных:

private String firstName;

И в файле сопоставления:

<property name="firstName" type="java.lang.String">
    <column name="FIRSTNAME" />
</property>

Но как мне сопоставить ArrayList с базой данных? Был бы признателен за простой пример из файла сопоставления xml.

Приветствия

UPDATE

Я переключился на List вместо ArrayList нашел пример. Теперь я отображаю следующее:

    <list name="test" inverse="false" table="CONTACT" lazy="true">
        <key>
            <column name="ID" />
        </key>
        <list-index></list-index>
        <element type="java.lang.String">
            <column name="TEST" />
        </element>
    </list>

К сожалению, я получаю исключение, которое не понимаю:

Exception in thread "main" org.hibernate.MappingException: Foreign key (FK6382B0003257FF7F:CONTACT [ID])) must have same number of columns as the referenced primary key (CONTACT [ID,idx])

Есть идеи?

Приветствия

Ответы [ 3 ]

6 голосов
/ 01 декабря 2010

Я заметил, что вы используете XML для сопоставления ваших POJO.Вы найдете некоторую информацию об этом здесь .

, например:

   <list name="myArrayListProperty" cascade="all">
        <key column="parent_id"/>
        <index column="idx"/>
        <one-to-many class="WhatIsInTheList"/>
    </list>

Однако использование аннотаций имеет некоторые преимущества. Эта ссылка объяснит, как сопоставить любую коллекцию с использованием аннотаций.

1 голос
/ 04 марта 2012

У вас есть небольшая ошибка в конфигурации XML:

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

<list name="test" inverse="false" table="CONTACT" lazy="true">
        <key>
            <column name="ID" />
        </key>
        <list-index></list-index>
        <element type="java.lang.String">
            <column name="TEST" />
        </element>
</list>

Вам необходимо сопоставить новую таблицу данных, содержащую значения списка:

<list name="test" inverse="false" table="CONTACT_test" lazy="true">
        <key>
            <column name="ID" />
        </key>
        <list-index></list-index>
        <element type="java.lang.String">
            <column name="TEST" />
        </element>
</list>

Hibernate автоматически создаст новую таблицу для вас.

1 голос
/ 01 декабря 2010

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

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