3

私のデータベースはMSSQLです。ROW_NUMBER()HQLで使用したい。出来ますか?どのように?私は知っていCustom Functionsます。ただし、web.configを変更する必要のない方法をお勧めします。

アップデート:

私の最終的な目標は、HQLを使用した最後のnレコードを除く、テーブル/エンティティ内のすべてのレコードを削除することです。それらすべてをメモリにロードしてから削除するのは好きではありません。

4

3 に答える 3

1

NH v2以降、HQLはを介して削除および更新ステートメントをサポートしIQuery.ExecuteUpdate()ます。IQuery.SetMaxResults()and IQuery.SetFirstResult()(を使用)を使用して実験しROW_NUMBER()、目的の効果を得ることができます。

編集:私は自分自身を実験しました、SetMaxResultsとSetFirstResultはExecuteUpdate()のSQL生成で無視されるので、これは機能しません。

また、以下のコメントでは、HQL ExecuteUpdate(および少なくともDELETEの場合)は、必ずしもオブジェクト状態のメモリ内ロードを意味するわけではありません。

于 2011-04-06T07:44:13.233 に答える
0

これにはプレーンSQLを使用します。主な理由は、「すべてをメモリにロードするのは好きではない」ということです。これはあまりオブジェクト指向のタスクではないため、ORMは必要ありません。

注:プレーンSQLは、セッションキャッシュが壊れることを意味します。同じ(ステートレスではない)セッション内で他のことを行わない限り、問題は発生しません。もしそうなら、私はOOの方法を選択し、実際にアイテムをメモリにロードします。

于 2011-04-06T08:41:16.083 に答える
0

ExecuteUpdate次のように、HQLとDesc順序を組み合わせて使用​​します。

delete Person p1 
where p1.Id in 
            (select p2.Id 
             from Person p2 
             where rownum <= 10
             order by p2.Id desc)
于 2011-04-06T09:28:44.097 に答える