次のエンティティ構造があるとします。
Document
- DocumentA
- DocumentB
基本クラス Document には、フィールドId、Name、CreateDateがあります。結合されたサブクラス DocumentA には、フィールドBook、Pagesがあります。DocumentB にはMagazine、Pagesがあります。
問題は、基準を使用してレコードを取得しようとするときです。
var prj = Projections.ProjectionList();
foreach (var col in selectColumns)
{
prj.Add(Projections.Property(col), col);
}
criteria.SetProjection(prj).SetResultTransformer(new AliasToBeanResultTransformer(entityType));
そのため、selectColumnsに2 つのPagesカラムがある場合、NHibernate は最初のカラムからのみデータを選択します。実際、このようなSQLクエリも生成します
SELECT top 15
this_1_.Pages as y0_
, this_1_.Pages as y1_
, this_.CreationDate as y2_
, this_.CreationAuthor as y3_
, this_.Name as y4_
, this_.Id as y5_
FROM Document this_
left outer join DocumentA this_1_ on this_.Id=this_1_.Id
left outer join DocumentB this_2_ on this_.Id=this_2_.Id
基準を使用して私の問題を解決する方法を知っている人はいますか? ところで、この構造を変更するオプションはありません。このシステムでは、ユーザーは独自のクラスとネストされたクラスを定義できます。