объединение двух таблиц с разными именами столбцов соединения - PullRequest
1 голос
/ 03 сентября 2010

У меня есть две таблицы A -> B с отображением / ассоциацией «многие к одному».

Первичным ключом таблицы B является внешний ключ в таблице A.

Проблема в том, что имена столбцов в обеих таблицах различны. скажем, B имеет столбец первичного ключа "typeNumId", который является внешним ключом в таблице A как "тип". Как я могу объединить обе таблицы в этом столбце? Как я могу указать сопоставление, чтобы указать, что таблицы должны объединяться на "typeNumId" и "тип", который по сути одинаков.

особенно это возможно через конфигурацию hibernate (файлы hbm)?

что-то вроде

<many-to-one name="Type" class="com.domain.ProcedureType" update="false" insert="false" fetch="join" lazy="false">
    <column name="? <this is in questions? >" not-null="true" />
</many-to-one>

Ответы [ 3 ]

2 голосов
/ 03 сентября 2010

Предложение ON:

select * from A join B on A.type = B.typeNumId
1 голос
/ 03 сентября 2010

Вы объявляете имя внешнего ключа, используя атрибут column элемента many-to-one или эквивалентный вложенный элемент column. Из документации:

5.1.12. Многие к одному

Обычная ассоциация с другим постоянный класс объявлен с использованием элемент многие-к-одному. Реляционный модель является ассоциацией «многие к одному»; внешний ключ в одной таблице ссылка на столбцы первичного ключа целевой таблицы.

<many-to-one
        name="propertyName"                                          (1)
        column="column_name"                                         (2)
        class="ClassName"                                            (3)
        cascade="cascade_style"                                      (4)
        fetch="join|select"                                          (5)
        update="true|false"                                          (6)
        insert="true|false"                                          (6)
        property-ref="propertyNameFromAssociatedClass"               (7)
        access="field|property|ClassName"                            (8)
        unique="true|false"                                          (9)
        not-null="true|false"                                        (10)
        optimistic-lock="true|false"                                 (11)
        lazy="proxy|no-proxy|false"                                  (12)
        not-found="ignore|exception"                                 (13)
        entity-name="EntityName"                                     (14)
        formula="arbitrary SQL expression"                           (15)
        node="element-name|@attribute-name|element/@attribute|."
        embed-xml="true|false"
        index="index_name"
        unique_key="unique_key_id"
        foreign-key="foreign_key_name"
/>
  1. name: название объекта.
  2. столбец (необязательно): имя столбца внешнего ключа. Это также может быть указано вложенным элемент (ы).
  3. class (необязательно - по умолчанию тип свойства определяется отражение): название ассоциированный класс.
  4. каскад (необязательно): указывает, какие операции следует каскадировать из родительский объект для связанного объект.
  5. fetch (необязательно - выбор по умолчанию): выбор между external-join выборка или последовательный выбор выборка.
  6. update, insert (необязательно - по умолчанию true): указывает, что сопоставленный столбцы должны быть включены в SQL ОБНОВЛЕНИЕ и / или ВСТАВКА. Установка обоих в ложь позволяет чистый «производная» ассоциация, чье значение инициализируется из другого свойства, которое отображается на тот же столбец (столбцы) или триггер или другое приложение.
  7. property-ref (необязательно): имя свойства связанного класса который присоединен к этому внешнему ключу. Если не указан, первичный ключ используется связанный класс.
  8. доступ (необязательно - по умолчанию свойство): стратегия, используемая Hibernate для доступа к значению свойства.
  9. unique (необязательно): включает генерацию DDL уникального ограничения для столбец внешнего ключа. Позволяя это быть целью свойство-ref, вы можете сделать кратность ассоциации один к одному.
  10. not-null (необязательно): позволяет генерировать обнуляемость DDL ограничение для внешнего ключа столбцы.
  11. optimistic-lock (необязательно - по умолчанию true): указывает, что обновления для этого свойства делают или не делают требуют приобретения оптимистического замок. Другими словами, он определяет, приращение версии должно происходить, когда это свойство грязное.
  12. Ленивый (необязательно - по умолчанию прокси): по умолчанию, одна точка ассоциации проксируются. lazy = "no-proxy" указывает, что свойство должно быть извлечено лениво, когда переменная экземпляра является первой доступ. Это требует времени сборки Инструментарий байт-кода. ленивая = «ложь» указывает, что ассоциация будет всегда будь готов с нетерпением.
  13. not-found (необязательно - по умолчанию исключение): указывает, как внешние ключи эта ссылка пропущенных строк будет обрабатываются. игнорировать будет относиться к пропавшим без вести строка как нулевая ассоциация.
  14. имя-сущности (необязательно): имя сущности связанного класса.
  15. формула (необязательно): выражение SQL, которое определяет значение для вычисленный внешний ключ.

Так что-то вроде этого должно сделать это:

<many-to-one name="Type" class="com.domain.ProcedureType" update="false" insert="false" fetch="join" lazy="false">
    <column name="type" not-null="true" />
</many-to-one>

Ссылки

0 голосов
/ 03 сентября 2010

Как-то так?

LEFT JOIN B on A.field1 = B.field2

Выберите тип JOIN на свой вкус

...