NHibernate 3.1.0.4000 での SQL クエリの結果に問題があります (MS SQL Server 2005 データベースを使用しています)。エンティティにマップされている と のAdverts
2つのテーブルがあります:と。列 (および外部キー)を介して接続されます。Investments
Advert
Investment
Adverts
Investments
InvestmentId
クエリの結果を保存するために、次の内部クラスを作成しました。
class InvestmentWithAdvertsCount
{
public Investment inv { get; set; }
public int cnt { get; set; }
}
クエリは次のとおりです。
var investementsWithAdvertCounts = _session.CreateSQLQuery(
"select {inv.*}, (select count(1) from Adverts where InvestmentId = inv.Id) cnt from Investments inv")
.AddScalar("cnt", NHibernateUtil.Int32)
.AddEntity("inv", typeof(Investment))
.SetResultTransformer(NHibernate.Transform.Transformers.AliasToBean(typeof(InvestmentWithAdvertsCount)))
.List<InvestmentWithAdvertsCount>();
このクエリを実行するとInvestmentWithAdvertsCount
、正しく入力されたcnt
プロパティを持つインスタンスのコレクションを受け取りますが、inv
プロパティは に設定されていnull
ます。NHibernate のソースを調べてみたところ、invエイリアスが何らかの形でクエリから失われ、NHibernate はinv
プロパティを入力しようとさえしていないようです。部分を削除すると、最初の要素がエンティティに設定され、2 番目の要素が対応する広告カウントに設定された.SetResultTransformer
(タイプ の) 配列のリストを受け取ります。このクエリを変更して正しく入力する方法を教えてください。あるいは、このクエリを QueryOver、Criteria、または HQL に書き換える (生成された SQL コードの効率を維持する) 方法があるでしょうか?object[2]
Investment
InvestmentWithAdvertsCount
この問題について何か助けていただければ幸いです。ありがとう