是否可以将COUNT与DISTINCT JPA投影一起使用?

时间:2010-10-05 08:19:13

标签: java jpa

我正在使用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查询来执行此操作。

4 个答案:

答案 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();