休眠条件分页



JAVA hibernate中有没有一种方法可以在一次数据库访问中执行标准查询和投影?

想要这样做的原因是获得最有效的页面结果的方式,我希望做以下

start transaction 
   start db call
     do query()
     do count()
   end db call
end transaction

我现在做的是

start transaction 
   start db call
     do query()
   end db call
   start db call
     do count()
   end db call
end transaction

大约一年前,我真的对此进行了研究,我发现最好的方法是在同一事务中执行两个数据库操作。它仍然是两个独立的数据库命中,但它消除了一些令人尴尬的标题,如45中的记录1-50。

这是一个经典的问题。简短的答案是否定的,因为您需要实际确定记录的数量,然后只需要检索页面所需的记录。我以前使用过相同的Criteria查询,但执行了以下操作:

  1. 设置除排序、限制和偏移之外的完整Criteria查询
  2. 向查询添加Projections.rowCount(),并使用uniqueResult()执行查询
  3. Projections设置为null
  4. 添加排序(addOrder)、限制(setMaxResults)和偏移(setFirstResult
  5. 再次运行查询,这次使用list检索结果集

请注意,即使在Oracle中的存储过程中工作,我也看到有经验的DBA会做完全相同的事情。

问题是,您甚至可以在SQL中制定这样的查询吗?你可能会想出一些疯狂的联合,将计数和结果的第一页放在一起,但我怀疑它的性能会比两个查询更好,而且hibernate没有办法自动为你映射。

最新更新