生成Hibernate Jpa存储库查询时出错

时间:2013-12-11 13:41:38

标签: sql spring hibernate jpa repository

我在Jpa Repository中使用此查询:

@Query("select f.attrezzature from FoglioLavoro f where f.id = :idFoglioLavoro")
Page<AbstractAttrezzatura> findAttrezzaturaFoglioLavoro(@Param("idFoglioLavoro")Long idFoglioLavoro, Pageable pageable);

但是当我使用这个查询时,我得到了这个错误:

ERROR: org.hibernate.engine.jdbc.spi.SqlExceptionHelper - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') as col_0_0_ from foglio_lavoro fogliolavo0_, foglio_lavoro_attrezzature attrez' at line 1

这是生成的spring-data查询:

Hibernate: 
select
    count(.) as col_0_0_ 
from
    foglio_lavoro fogliolavo0_,
    foglio_lavoro_attrezzature attrezzatu1_,
    abstract_attrezzatura abstractat2_ 
where
    fogliolavo0_.id=attrezzatu1_.fogli_lavoro 
    and attrezzatu1_.attrezzature=abstractat2_.id 
    and fogliolavo0_.id=?

我该如何解决? 非常感谢你

1 个答案:

答案 0 :(得分:3)

当您的存储库方法返回Page<T>时,Spring Data JPA会尝试从您指定的查询中推断出元素总数的查询,有时推断的查询是错误的。

在这种情况下,您需要明确指定计数查询:

@Query(
    value = "select f.attrezzature from FoglioLavoro f where f.id = :idFoglioLavoro",
    countQuery = "select count(elements(f.attrezzature)) from FoglioLavoro f where f.id = :idFoglioLavoro")
Page<AbstractAttrezzatura> findAttrezzaturaFoglioLavoro(@Param("idFoglioLavoro")Long idFoglioLavoro, Pageable pageable);