2

多対 1 のマッピング/関連付けを持つ 2 つのテーブル A -> B があります。

テーブル B の主キーは、テーブル A の外部キーです。

問題は、両方のテーブルの列名が異なることです。Bには、テーブルAの外部キーである主キー列「typeNumId」が「タイプ」としてあるとします。この列で両方のテーブルを結合するにはどうすればよいですか? 基本的に同じである「typeNumId」と「type」でテーブルを結合する必要があることを示すマッピングを指定するにはどうすればよいですか。

特に、これは hibernate config (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>
4

3 に答える 3

3

ON 句:

select * from A join B on A.type = B.typeNumId
于 2010-09-03T13:37:29.877 に答える
1

column要素の属性many-to-oneまたは同等のネストされた要素を使用して、外部キーの名前を宣言しcolumnます。ドキュメントから:

5.1.12. 多対一

別の永続クラスへの通常の関連付けは、多対 1 要素を使用して宣言されます。リレーショナル モデルは、多対 1 の関連付けです。1 つのテーブルの外部キーが、ターゲット テーブルの主キー列を参照しています。

<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. column (オプション): 外部キー列の名前。これは、ネストされた要素によっても指定できます。
  3. クラス (オプション - デフォルトはリフレクションによって決定されるプロパティ タイプ): 関連するクラスの名前。
  4. cascade (オプション): 親オブジェクトから関連付けられたオブジェクトにカスケードする操作を指定します。
  5. fetch (オプション - デフォルトで選択): 外部結合フェッチまたは順次選択フェッチのいずれかを選択します。
  6. update、insert (オプション - デフォルトは true): マップされた列を SQL UPDATE および/または INSERT ステートメントに含める必要があることを指定します。両方を false に設定すると、値が同じ列にマップされる別のプロパティから、またはトリガーまたは他のアプリケーションによって初期化される、純粋な「派生」関連付けが許可されます。
  7. property-ref (オプション): この外部キーに結合された関連クラスのプロパティの名前。指定しない場合、関連付けられたクラスの主キーが使用されます。
  8. access (オプション - デフォルトはプロパティ): Hibernate がプロパティ値にアクセスするために使用する戦略。
  9. unique (オプション): 外部キー列の一意制約の DDL 生成を有効にします。これを property-ref のターゲットにできるようにすることで、関連付けの多重度を 1 対 1 にすることができます。
  10. not-null (オプション): 外部キー列の null 可能性制約の DDL 生成を有効にします。
  11. optimistic-lock (オプション - デフォルトは true): このプロパティの更新で楽観的ロックの取得が必要かどうかを指定します。つまり、このプロパティがダーティな場合にバージョンをインクリメントするかどうかを決定します。
  12. lazy (オプション - デフォルトはプロキシ): デフォルトでは、単一ポイントの関連付けがプロキシされます。lazy="no-proxy" は、インスタンス変数が最初にアクセスされたときにプロパティを遅延フェッチすることを指定します。これには、ビルド時のバイトコード インストルメンテーションが必要です。lazy="false" は、関連付けが常に熱心にフェッチされることを指定します。
  13. not-found (オプション - デフォルトは例外): 欠落している行を参照する外部キーの処理方法を指定します。ignore は、欠落している行を null 関連として扱います。
  14. entity-name (オプション): 関連するクラスのエンティティ名。
  15. formula (オプション): 計算された外部キーの値を定義する 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>

参照

于 2010-09-03T17:06:41.717 に答える
0

このようなもの?

LEFT JOIN B on A.field1 = B.field2

あなたの好みに合わせてJOINのタイプを選択してください

于 2010-09-03T13:36:53.077 に答える