私は現在、(Fluent)NHibernateを取得してオブジェクトをレガシーデータベーススキーマにマップしようとしています。関連する3つのテーブルがあります。
- 表aには、取得する必要のある実際のオブジェクトのほとんどの情報が含まれています
- 表bは、表aと表cを接続する表です。
- 表cには、オブジェクトに必要な追加のフィールドが1つあります。
情報を取得するためのSQLクエリは次のようになります。
SELECT z.ID, z.ZANR, e.TDTEXT
FROM PUB.table_a z
JOIN PUB.table_b t ON (t.TDKEY = 602)
JOIN PUB.table_c e ON (e.ID = t.ID AND e.TDNR = z.ZANR)
WHERE z.ZANR = 1;
主な問題は、マッピングでこれら2つの結合条件をどのように指定するかです。
テーブルaのエンティティは次のようになります。
public class EntityA
{
public virtual long Id { get; set; }
public virtual int Number { get; set; }
public virtual string Name { get; set; }
}
名前は列table_c.TDTEXTにマップする必要があります。
私がこれまでに持っているマッピングはこれです:
public class EntityAMap : ClassMap<EntityA>
{
public EntityAMap()
{
Table("PUB.table_a");
Id(x => x.Id).Column("ID");
Map(x => x.Number).Column("ZANR");
}
}
流暢なnhibernateでテーブルを結合する方法と同じ戦略で最初の結合をマップしようとしましたが、table_aからtable_bへの直接参照がないため、これは機能しません。それらを接続するのは定数602だけです。 (上記のSQLクエリを参照してください)。
どういうわけか、マッピングでその定数を指定する方法が見つかりませんでした。