implementation-result-paging-in-hibernate-getting-total-number-of-rowsの質問は、いくつかの実装上の懸念について、別の質問を引き起こします。
これで、カウントを行うために HQL クエリの一部を再利用する必要があることがわかりました。効率的に再利用するにはどうすればよいでしょうか?
2 つの HQL クエリの違いは次のとおりです。
- 選択は
count(?)
、pojo またはプロパティ (またはリスト) の代わりに - フェッチは発生しないため、一部のテーブルは結合しないでください
- 消える
order by
べき
他に違いはありますか?
この再利用を効率的に達成するためのコーディングのベストプラクティスはありますか(懸念事項: 労力、明確さ、パフォーマンス)?
簡単な HQL クエリの例:
select a from A a join fetch a.b b where a.id=66 order by a.name
select count(a.id) from A a where a.id=66
更新しました
回答を受け取りました:
- Criteriaを使用(ただし、主に HQL を使用)
- 文字列クエリの操作 (しかし、誰もが複雑で安全ではないことに同意します)
- データベースの最適化に頼って、クエリをラップします(ただし、これは安全ではないと感じています)
私は誰かが別の道に沿ってオプションを提供することを望んでいました.文字列の連結に関連しています.
共通部分を使用して両方の HQL クエリを作成できますか?