1

HqlQueryスタイルの「新しいObjectToProjectOutを選択」機能を再現しようとしています。つまり、クエリから返された列のリストを取得し、クエリ内の列と同じ数のパラメータを持つコンストラクタを使用してインスタンス化されたObjectToProjectOutタイプのリストとして返します。

これは事実上、Hqlで「selectnew ObjectToProjectOut」が達成することですが、SqlQueryでは明らかに利用できません。結果変換を設定し、PassThroughResultTransformer、DistinctRootEntityResultTransformerなどを使用して機能させる必要があると思います。

誰が私が何を使うべきか知っていますか?

4

2 に答える 2

2

わかりました....NHibernateコードを見た後、私が探していたようですAliasToBeanConstructorResultTransformer....もちろん!

ただし、nHibernate のバグが見つかった可能性があります。2 つの異なるテーブル (market.name と account.name など) から同じ列名が 2 回返された場合、nHibernate が db からトランスフォーマーに配列を返すまでに、最初に出現した 'Name' が使用されます。両方。汚い。

回避策は、一意にエイリアスすることです。Hql を使用すると、生成された sql は大きくエイリアス化されるため、これは SqlQuery のバグにすぎません。

うーん。今日は私の日であるに違いありません。コメントのために StackOverflow に投稿した別の nHibernate バグ/問題も見つかりました。

于 2010-02-04T16:09:13.930 に答える
1

AddEntity メソッドを使用して、SQL クエリからエンティティを埋めることができます。

NHibernate docsからの 2 つの例を次に示します。

sess.CreateSQLQuery("SELECT * FROM CATS")
    .AddEntity(typeof(Cat));

sess.CreateSQLQuery("SELECT ID, NAME, BIRTHDATE FROM CATS")
    .AddEntity(typeof(Cat));
于 2010-02-04T15:56:41.847 に答える