を追加する予測は、基準の設定によりどちらのモ停止すのであらかのデフォルト企業の選定
-
10-07-2019 - |
質問
私は書き込むときの設定によりどちらのモ条件を選択するデータの支援ページ欄に入力してください。私が使っているの COUNT(*) OVER()
表現からSQL Server2005(+)に対する支配を確立するの総数列として ことを示唆 によるAyende Rahien.だってこの数を計算することができ多くページがあります。の美しさにこのソリューションにはない実行する必要は次のクエリに対する支配を確立する行数です。
しかできないよう管理を書く働基準(Ayendeを提供するだけでなく、HQLクエリ).
こちらはSQLクエリを示すだいたいとします。注その意図的に残っていても、実際のページングが、"ロジカル(論理的)である心の問題:
SELECT Items.*, COUNT(*) OVER() AS rowcount
FROM Items
こちらはHQL:
select
item, rowcount()
from
Item item
ことに注意 rowcount()
機能は登録されたカスタム設定によりどちらのモ弁を解決する COUNT(*) OVER()
SQL.
ることを確認する必要があり、問い合わせによって表されます。残念ながら、わからないの正す:
var query = Session
.CreateCriteria<Item>("item")
.SetProjection(
Projections.SqlFunction("rowcount", NHibernateUtil.Int32));
またの追加投影、設定によりどちらのモを選択しない item
(うずマイページへのアクセスにはログに rowcount()
をする必要があります。また、できないようプロジェクト item
のの、全体としてだけでは物件とないんですけたいリスト全員について記入してください。
思いるソリューションを提供。ります。
解決
せざるをえないと思うので基準である。
を取得しましたこれらの内、idおよび負荷項目以降のクエリ:
var query = Session
.CreateCriteria<Item>("item")
.SetProjection(Projections.ProjectionList()
.Add(Projections.SqlFunction("rowcount", NHibernateUtil.Int32))
.Add(Projections.Id()));
なので、HQLに設定することができる最大数の実績がありすぎる:
IList<Item> result = Session
.CreateQuery("select item, rowcount() from item where ..." )
.SetMaxResult(100)
.List<Item>();
他のヒント
利用CreateMultiCriteria.
ドできるようになりました。2単純には、発言と発言間の関係を明確に一つだけヒットをDBにすることができてうれしいです。
ただしを使用基準が必要です。できない使用します。CreateSQLQuery?まらなければならない一つのクエリがあると思いことを示唆くの項目オブジェクトと、カウントのように:
select {item.*}, count(*) over()
from Item {item}
---これまでの項目から検索すると、としています。た場合の問題を、Hibernateのキャッシュ、を設定することもできるクエリス(エンティティ/キャッシュテーブルに関連付けネイティブクエリのように無効なクエリキャッシュのエントリをクリアします。
かご質問は一切しています。悩んだこともこれと同じ問題です。
せについてポスター発表を行ってきついたことを確認します。私の問題のためのページ欄に入力してください。新しい10のUI、またお知りになりたい 合計 レコード数ではアーケード続きのため、対象とすることが出来ます。たいと思ったこのNH基準APIが追加投影のための行数、クエリーなくして事なきを得たのでしたか他の結果記憶してない、特定のエラーがるように聞こえるよういただけます).
ここでの私のソリューション(コピー&ペーストから私の現在の生産コードとします。なお、"SessionError"の名称事業者の思索ページごとに区切のデータによると、3つのフィルタの基準IsDev,IsRead、IsResolved.
ICriteria crit = CurrentSession.CreateCriteria(typeof (SessionError))
.Add(Restrictions.Eq("WebApp", this));
if (isDev.HasValue)
crit.Add(Restrictions.Eq("IsDev", isDev.Value));
if (isRead.HasValue)
crit.Add(Restrictions.Eq("IsRead", isRead.Value));
if (isResolved.HasValue)
crit.Add(Restrictions.Eq("IsResolved", isResolved.Value));
// Order by most recent
crit.AddOrder(Order.Desc("DateCreated"));
// Copy the ICriteria query to get a row count as well
ICriteria critCount = CriteriaTransformer.Clone(crit)
.SetProjection(Projections.RowCountInt64());
critCount.Orders.Clear();
// NOW add the paging vars to the original query
crit = crit
.SetMaxResults(pageSize)
.SetFirstResult(pageNum_oneBased * pageSize);
// Set up a multi criteria to get your data in a single trip to the database
IMultiCriteria multCrit = CurrentSession.CreateMultiCriteria()
.Add(crit)
.Add(critCount);
// Get the results
IList results = multCrit.List();
List<SessionError> sessionErrors = new List<SessionError>();
foreach (SessionError sessErr in ((IList)results[0]))
sessionErrors.Add(sessErr);
numResults = (long)((IList)results[1])[0];
私の作成基準オプションです。そのクローンでは、追加の行数の突起のクローニング基準とします。ご注意いクローンで 前 を追加しますページングの制約です。その設IMultiCriteriaの独自のクローニングICriteria物のIMultiCriteriaへの両方を実施します。しかし、今まで私がページごとに区切データからのICriteria(やまみをドラッグのデータを必要としているワイヤー)の原数多くの実績がわ基準を使用し表示または作成ページリンクなど).この戦略が機能しない。この階調を与えた画になります。
この調査結果のカスタムトランスを呼び出しSetResultTransformer()およ。
作成式にクラスマッピング:
<property name="TotalRecords" formula="count(*) over()" type="Int32" not-null="true"/>;
IList<...> result = criteria.SetFirstResult(skip).SetMaxResults(take).List<...>();
totalRecords = (result != null && result.Count > 0) ? result[0].TotalRecords : 0;
return result;