Отображение отношения «многие к одному» с помощью составного альтернативного ключа

1

У меня есть два объекта A и B со следующим соотношением

  1. внешний ключ в состоит из двух столбцов (составных), которые не относятся к первичному ключу B (альтернативный ключ);
  2. мощность между A и B равна [*] - [0..1], то есть внешние ключи в могут быть нулевыми, а отношение "много-к-одному" необязательно;
  3. отношение является однонаправленным A → B. Я хочу загрузить B в с соединением.

Как написать hibernate-сопоставления.hbm для A и B (спящий режим 3, без аннотаций)?

Теги:
hibernate
orm
jpa
hibernate-mapping

1 ответ

2
Лучший ответ
  1. В соответствии с этой статьей вы можете создать свойство составного идентификатора в родительском классе (например, A):

    <properties name="ParentNaturalId">
        <property name="prop1" column="prop_1" />
        <property name="prop2" column="prop_2" />
    </properties>
    

    И Клиент ссылается на родителя через эту ассоциацию "один-на-один":

    <many-to-one name="parent" class="B" not-null="false" not-found="ignore" property-ref="ParentNaturalId" fetch="join">
        <column name="b_prop_1" />
        <column name="b_prop_2" />
    </many-to-one>
    
  2. См. Атрибут not-found = "ignore" many-to-one:

not-found (необязательно - по умолчанию исключение): указывает, как будут обрабатываться внешние ключи, которые ссылаются на отсутствующие строки. ignore будет обрабатывать недостающую строку как ассоциацию нулей.

  1. См. Атрибут fetch = "join" много-к-одному:

fetch (необязательно - по умолчанию для выбора): выбор между выборкой внешнего соединения или последовательной выборкой выборки.

  • 0
    Можете ли вы предоставить авторитетную ссылку на пункт 3? Я запутался с типами выборки по умолчанию в спящем режиме и JPA.
  • 0
    Требование 2 удовлетворяется атрибутом not-found, а 3 - как Hibernate управляет ассоциациями *-to-one. Все многие-к-одному охотно выбираются по умолчанию. JPA определяет только EAGER и LAZY, и каждая реализация JPA определяет, какой режим использовать для EAGER (JOIN или SELECT). Проверьте этот документ для некоторых примеров извлечения Hibernate.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню