2

NHIbernate の HQL クエリから定数を返す必要があります。

SELECT new NDI.SomeQueryItem(user, account, " + someNumber + ") 
FROM NDI.SomeObject object

上記のようなものを目指しています。私はこれを試しました:

SELECT new NDI.SomeQueryItem(user, account, :someNumber) 
FROM NDI.SomeObject object

そして後で:

.SetParameter("someNumber", 1).List<SomeQueryItem>();

しかし、最初のケースでは、「未定義のエイリアスまたは不明なマッピング 1」が表示されます。おそらく 1 がエイリアスであると考えているため、これはある程度理にかなっています。

次に、「未定義のエイリアスまたは不明なマッピング:someNumber」を取得します。これは、パラメーターが設定されていない場合でも意味があります。

これを行う方法があると信じなければなりません。

4

2 に答える 2

3

これを行う何らかの方法があると信じ続けてください。しかし、HQL にはそのような方法はありません。

とにかくしたいのはなぜですか?このプロパティの値を指定した値に更新する場合は、オブジェクトをロードした後に行ってください。または、結果セットがオブジェクトと完全に一致しない場合は、常に SQL クエリを使用できます (これは NHibernate セッションを介して行うことができます)。しかし、NHibernate の目的は、データベースにあるものをオブジェクトにマップすることなので、このような手動オーバーライドを指定することはまったく許可されていません。

于 2009-04-09T16:06:06.573 に答える
1

ドメイン オブジェクトとデータベース モデルの間に (小さな?) 切断があるようです。このギャップを埋めるために小さな「DTO」オブジェクトを作成するのはどうですか?

クエリが SomeQueryItemDTO (またはそれを呼び出したいもの) のリストを返すようにします。これは、名前付けのために、ドメインの真の部分ではないことがわかっています。次に、リストを処理し、データベースに関係のないデータを組み込むことによって、真の SomeQueryItem オブジェクトのリストを作成する機能をいくつか用意します。

すでにリポジトリ パターンを使用している場合は、すべての醜い詳細がリポジトリ内に隠されているため、これは簡単なはずです。

于 2009-04-09T16:30:35.143 に答える