我正在使用JPA distinct投影来获取一些数据:
select distinct o.f1, o.f2, o.f3 from SomeEntity o where ...
这适用于setFirstResult和setMaxResults到页面数据。
但是我需要计算总行数而不取出所有行。我试过了:
select count(distinct o.f1, o.f2, o.f3) from SomeEntity o where ...
这不起作用(无论如何都使用EclipseLink)并且JPA规范似乎不允许这样做。还有另外一种方法吗?我不想编写SQL查询来执行此操作。
答案 0 :(得分:7)
试试这个:
select count(distinct o) from SomeEntity o where ...
答案 1 :(得分:0)
如果EclipseLink和您的基础数据库允许子选择,请尝试:
select count(*) from (select distinct o.f1, o.f2, o.f3 from SomeEntity o where ... )
这样你就可以把你的JQL放进去计算它的总结果大小。
这适用于hibernate sql命名查询。我很快就会尝试JP-QL查询。
答案 2 :(得分:0)
尽管这个答案来得很晚,但它可能会帮助将来的人们。 在您的存储库中。 就我自己而言,这对我有用。
@Query(“从SomeEntity o WHERE ....中选择不同的计数(o.f1,o.f2 ...)
希望对别人有帮助。
答案 3 :(得分:-3)
您说您不想编写SQL查询来执行此操作,但JPA QL和SQL之间有什么区别?如果您不想使用getResultList().size()
方法来确定总行数,那么唯一的方法是使用本机SQL查询。
entityManager.createNativeQuery("select count(distinct o.f1, o.f2, o.f3) from SomeEntity o where ...").getSingleResult();
或
entityManager.createQuery("select distinct o.f1, o.f2, o.f3 from SomeEntity o where ...").getResultList().size();