2

A と B の 2 つのフィールドを持つオブジェクト O があります。フィールド A のみがフェッチされるように、データベースから O をフェッチするにはどうすればよいですか?

もちろん、実際のアプリケーションにはもっと多くのフィールドを持つオブジェクトがありますが、プリンシパルを理解するには 2 つのフィールドで十分です。

NHibernate 2.1 を使用しています。

ありがとう。

編集:

明らかにしたい。タイプ O のオブジェクトをフェッチする必要があります。場合によっては、完全なオブジェクトをフェッチする必要があります。つまり、A フィールドと B フィールドの両方がデータベースの値から設定されます。しかし、データベースの値から A フィールドのみを設定して O オブジェクトを取得したい場合もあります。

4

2 に答える 2

3

プロジェクションを使用して結果セットを目的の列に絞り込み、結果トランスフォーマーを使用して結果を目的の型に変換します。

これにより、永続エンティティではなく一時オブジェクトが返されます。

// select some User objects with only the Username property set
var u = session.CreateCriteria<User>()
    .SetProjection( Projections.ProjectionList().Add(Projections.Property("Username"), "Username")  ) 
    .SetResultTransformer( Transformers.AliasToBean<User>() )
    .List<User>();
于 2010-03-18T14:26:42.890 に答える
0

HQL には、select newフィールドのサブセットのみを取得できる構造があります。ただし、返されたオブジェクトを DB に保存することはできません。

別の方法として、限定された一連のプロパティを使用して追加のクラスを作成し、それらを問​​題のテーブルにマップすることができます。

于 2010-03-18T13:36:21.200 に答える