如何将这个subselect sql写入jpql?

时间:2014-04-29 17:01:59

标签: jpa spring-data jpql

如何将下面的sql转换为jpql?我只是想计算子选择返回的行数。

select count(*) from (select t.prop1 from table1 t where t.someprop ='123' group by t.num);

我试过

@Query("Select count(*) from (select t.prop1 from table1 t where t.someprop ='123' group by t.num")

2 个答案:

答案 0 :(得分:0)

我不认为它在语义上是合适的。 JPQL和SQL不可互换,它们与JPA和JDBC有不同的用途。 JPA的想法是你为对象完成了大部分关系数据库对象映射。

我认为您的方案中的相应操作是将EntityManager和JdbcOperations自动装配到您的存储库类中,并使用任何目的服务(尽管可以使用事务)

您还可以使用EntityManager.createNativeQuery

答案 1 :(得分:0)

您可以尝试以下代码。

String sql = "SELECT COUNT(t.prop1) FROM table1 t WHERE t.someprop ='123' GROUP BY t.num";
Query query = entityManager.createQuery(sql);
long count = (long)query.getSingleResult();

如果经常使用此查询,请尝试使用NamedQuery&还为someprop设置参数,不要直接在查询中给出值,除非它是常量。