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
答案 0 :(得分:1)
大约一年前我真的对此进行了调查,我想到的最好的是在同一个事务中执行两个数据库操作。它仍然是两个单独的数据库命中,但它消除了一些令人尴尬的标题,例如来自45的记录1-50。
答案 1 :(得分:1)
这是一个经典问题。简短的答案是否定的,因为您需要实际确定记录数,然后您只需要检索您想要的页面记录。我之前使用相同的Criteria
查询完成了此操作,但执行以下操作:
Criteria
查询,但排序,限制和偏移Projections.rowCount()
,然后使用uniqueResult()
Projections
设置为null
addOrder
),限制(setMaxResults
)和偏移(setFirstResult
)list
检索结果集请注意,即使在Oracle中的存储过程中工作,我也见过有经验的DBA做同样的事情。
答案 2 :(得分:0)
问题是你甚至可以在SQL中制定这样的查询吗?你或许可以想出一些疯狂的联盟,将计数和结果的第一页结合在一起,但是我怀疑性能会比两个查询更好而且没有,hibernate没有办法为你自动映射这个