Короткий ответ: "Вы не должны": -)
Как правило, в первую очередь рекомендуется использовать суррогатный ключ; Более того, вы бы упростили сопоставления, используя один идентификатор вместо составного. Тем не менее, существуют ситуации (например, отображение устаревших схем), когда вам нужно использовать составной ключ.
В приведенном выше примере показано, как сопоставить составной ключ как компонент. Это лучший подход, чем использование самой сущности в качестве ее собственного ключа, что случится, если вы отобразите ее без атрибута class
на <composite-id>
. Основные отличия:
- При сопоставлении составного ключа как компонента вы напишите новый класс (
OrderLineId
), который будет содержать сопоставленные отдельные части ключа (lineId
, orderId
, customerId
) в качестве свойств. При сопоставлении составного ключа с самой сущностью ваш класс сущности (OrderLine
) должен будет содержать эти свойства.
- Чтобы загрузить
OrderLine
с использованием сопоставления «ключ как компонент», вы создадите новый экземпляр OrderLineId
и передадите его в session.get()
в качестве ключа. Используя отображение «ключ на сущность», вам нужно будет создать экземпляр OrderLine
для загрузки OrderLine
, что в лучшем случае сбивает с толку и в худшем случае представляет проблему целостности данных.