implementation-result-paging-in-hibernate-getting-total-number-of-rows问题引发了我的另一个问题,关于一些实现问题:
现在您知道必须重用部分 HQL 查询来进行计数,如何有效地重用?
两个 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
更新
我收到了以下答复:
- 使用标准(但我们主要使用 HQL)
- 操作字符串查询(但每个人都同意它看起来很复杂而且不是很安全)
- 包装查询,依赖数据库优化(但有一种感觉,这样不安全)
我希望有人会沿着另一条路径提供选项,与字符串连接更相关。
我们可以使用公共部分构建两个 HQL 查询吗?