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

Предположим у нас есть таблица ITEM, в которой хранится информация о товаре, и таблица ITEM_SIZE, в которой хранится информация о размерах товара.

Структура таблицы ITEM:

  1. ID – уникальный идентификатор товара
  2. NAME – наименование товара
  3. какие-либо еще поля, описывающие другие свойства товара

Структура таблицы ITEM_SIZE:

  1. ITEM_ID – внешний ключ та таблицу ITEM
  2. SIZE – размер товара

Для таблицы ITEM мы создадим сущность Item с описанными выше свойствами и коллекцией размеров товара, для которой мы и сделаем маппинг:

public class Item
{
    private Integer id;
    private String name;
    private Set<Integer> sizes;

    // другие поля, аксессоры
}

Соответствующий маппинг для сущности Item:

<hibernate-mapping>
    <class name="Item" table="ITEM">
        <id name="id" type="int">
            <column name="ID" />
            <generator class="identity" />
        </id>

        <property name="name" type="string" column="NAME"/>

        <set name="sizes" table="ITEM_SIZE">
            <key column="ITEM_ID" />
            <element column="size" type="int" />
        </set>
    </class>
</hibernate-mapping>

В этом маппинге нас интересует маппинг свойства sizes.

Для маппинга этого свойства используется элемент set. Свойство name задает имя свойства сущности Item, свойство table задает название таблицы.

Элемент key задает внешний ключ в таблице ITEM_SIZE на таблицу ITEM. Свойство column задает наименование столбца.

Элемент element задает столбец, данные которого будут помещены в коллекцию и тип этих данных. Свойство column задает наименование столбца с данными, поле type – тип данных, находящихся в столбце. Тип данных может быть как встроенным, так и пользовательким.

В следующей статье я покажу как при помощи элемента element сделать маппинг, когда элементом коллекции должен быть элемент перечисления (Java enum).