Hibernate: указывает, какой столбец в родительском объекте <join /> следует использовать - PullRequest
2 голосов
/ 27 августа 2010

В моем файле HBM есть следующая сущность:

<join table="v_price_change_current_prices" fetch="join" inverse="true">
    <key column="product_color_id" />
    <property name="oldMSRP" column="msrp" />
    <property name="oldList"  column="list" />
</join>

В моей таблице PRICE_CHANGE есть столбец идентификатора (первичный ключ)) и столбец PRODUCT_COLOR_ID.

Я бы хотел, чтобы SQL Hibernate создавал соединение V_PRICE_CHANGE_CURRENT_PRICES к PRICE_CHANGE.PRODUCT_COLOR_ID, например так:

    SELECT * from PRICE_CHANGE a, V_PRICE_CHANGE_CURRENT_PRICES b 
where a.product_color_id=b.product_color_id

Но вместо этого присоединяется к PRICE_CHANGE.ID

    SELECT * from PRICE_CHANGE a, V_PRICE_CHANGE_CURRENT_PRICES b 
where a.product_color_id=b.product_color_id

Есть ли способ указать элементу использовать PRICE_CHANGE.PRODUCT_COLOR_ID вместо PRICE_CHANGE.ID?

1 Ответ

3 голосов
/ 27 августа 2010

Согласно документации, это может быть осуществлено с использованием property-ref в элементе <key>:

5.1.21.Ключ

Элемент <key> несколько раз упоминался в этом руководстве.Он появляется везде, где родительский элемент отображения определяет соединение с новой таблицей, которая ссылается на первичный ключ исходной таблицы.Он также определяет внешний ключ в объединенной таблице:

<key
        column="columnname"                      (1)
        on-delete="noaction|cascade"             (2)
        property-ref="propertyName"              (3)
        not-null="true|false"                    (4)
        update="true|false"                      (5)
        unique="true|false"                      (6)
/>
  1. column (необязательно): имя столбца внешнего ключа.Это также может быть указано вложенными элементами.
  2. on-delete (необязательно - по умолчанию noaction): указывает, включено ли ограничение внешнего ключа каскадного удаления на уровне базы данных.
  3. property-ref (необязательно): указывает, что внешний ключ относится к столбцам, которые не являются первичным ключом исходной таблицы.Он предоставляется для устаревших данных.
  4. not-null (необязательно): указывает, что столбцы внешнего ключа не могут иметь значение NULL.Это подразумевается, когда внешний ключ также является частью первичного ключа.
  5. update (необязательно): указывает, что внешний ключ никогда не должен обновляться.Это подразумевается, когда внешний ключ также является частью первичного ключа.
  6. unique (необязательно): указывает, что внешний ключ должен иметь уникальное ограничение.Это подразумевается всякий раз, когда внешний ключ является также первичным ключом.

Но я не уверен, что это на самом деле реализовано (см. HHH-551 , HHH-1829 ).

Альтернативой, если вы действительно не хотите использовать общий первичный ключ, является использование композиции и "реального" один-к-одному вместо этого.

Ссылки

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