これは実際のスキーマの単純化された例ですので、ご容赦ください。と列を持つテーブルfoo
がありid
ますvalue
。bar
テーブルに戻る FK を持つテーブルもありfoo
、このテーブルにはextended_value
列があります。Foo のクラス マップを残して Bar に参加させ、存在する場合はその列を使用しようとしextended_value
、そうでない場合は Foo にフォールバックしvalue
ます。
必要なものに相当するSQLは次のとおりです。
select coalesce(b.extended_value, f.value) as value
from foo f
left join bar b on (b.id = f.id)
NHibernate の上で Fluent を使用しています。これは私が使用しようとしてきたものです:
Join("bar", m =>
{
m.Optional();
m.KeyColumn("id");
m.Map(foo => foo.Value).Formula("COALESCE(extended_value, value)");
});
extended_value
しかし、生成された SQL はとの両方value
が同じテーブルにあることを想定しているため、これは失敗しています。
何か案は?