2009-03-17 9 views
3

私はnHibernateを使用していて、いくつかのページングを実装しようとしています。このコードを実行すると、nHibernate SetFirstResult&SetMaxResults問題

IList list = session.CreateQuery("FROM Author").List(); 

は8レコードを返します。このコードを実行すると、

IList list = session.CreateQuery("FROM Author") 
    .SetFirstResult(1).SetMaxResults(5).List(); 

0レコードが返されます。生成されたSQLを見ると、ページングロジックがないことがわかります。

これで最もよく発生するエラーは何ですか?

答えて

1

あなたは構文が正しいので、そのテーブルにデータがある限り、なぜ結果が0になるのかわかりません。

生成されたSQLの限り、MSSQL ServerはLIMITコマンドとOFFSETコマンドをサポートしていないため、サーバ上でページングをそのように実装することはできません。 SQL 2000では、すべての行を取得し、その結果セットから選択したサブセットを取得する必要があります。

他にも、クエリが別のトランザクション内にあることを確認することができます。私はこれが役立つかもしれないことを示唆する記事を見た。 SetFirstResult/SetMaxResultsでの単体テストが成功したため、何かがあるかもしれません。

3

NHibernateについてはわかりませんが、Javaでは結果インデックスは0ベースです。 .SetFirstResult(1)の代わりに.SetFirstResult(0)を呼び出してください。そうでない場合は、1つの行だけが0の結果を返します。あなたには8行あるように聞こえるので、どのような結果が得られないのか分かりません。

0

たぶん、web.configファイルであなたの方言と接続プロバイダを確認するか、app.configを

<property name="dialect">NHibernate.Dialect.MsSql2008Dialect</property> 
    <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property> 
    <property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property> 
関連する問題