2

私の従来のデータベースでは、次のような状況があります。

TableA (id_A[PK], cod_A)
TableB (id_B[PK], cod_B, id_A[FK])
TableC (id_C[PK], cod_C, id_B[FK])

いくつかの理由から、これらのテーブルを 1 つのクラス (この例では Foo) にマップする必要があります。

public class Foo
{
    public virtual string IdA { get; set; }
    public virtual string CodA { get; set; }

    public virtual string IdB { get; set; }
    public virtual string CodB { get; set; }

    public virtual string IdC { get; set; }
    public virtual string CodC { get; set; }    
}

次のマッピングにより、Table1 と Table2 を結合できますが、Table3 は結合できません

<class name="Foo" table="TableA">

    <id name="IdA" column="id_A"/>
    <property name="CodA" column="cod_A"/> 

    <join table="TableB">
      <key column="id_A"/>
      <property name="IdB" column="id_B"/>
      <property name="CodB" column="cod_B"/>      
    </join>

    <!--Here my problem because off course the join will be on TableA instead on TableB-->
    <join table="TableC">
      <key column="id_B"/>
      <property name="IdC" column="id_C"/>
      <property name="CodC" column="cod_C"/>      
    </join>

  </class>

Table3 をどのようにマッピングできますか?

前もって感謝します。

4

2 に答える 2

1

Hibernate は、できるだけ join を使用しないようにします。しかし、時にはそれを回避する方法はありません。

それを解決する最初の最も簡単な方法は、可能であれば、ビューを作成し、クラスをビューにマップすることです。

2 番目の方法は、オブジェクトを他の各テーブルに作成し、それらを適切な方法 (おそらく<one-to-one>マッピング) で接続することです。

第三の方法

*警告 - 自己責任で進めてください*

NH ソース コードをダウンロードします - https://github.com/Nicaog/nhibernate-core/downloads

次のバグ パッチ修正手順をダウンロードしてください - https://nhibernate.jira.com/browse/NH-1681

コードを変更し、DLL をコンパイルして、ソリューションに追加します。

説明 - パッチは実際にはマッピングの使用property-refを修正します。で複数の結合を使用することもできます。<join>property-ref

于 2013-11-13T06:56:25.817 に答える