Spring Data JPA @Query注释,nativeQuery = true,

时间:2016-04-05 17:33:11

标签: java spring-data-jpa

我的@Repository

有问题
@Repository
public interface RekvZmRepository extends CrudRepository<RekvalZamestn, RekvalZamestnPk> {
@Query(value = "SELECT z.* FROM rek_zm d INNER JOIN proj_a a ON d.id = a.prj_idcislo"
  + "                                   INNER JOIN proj_e e ON a.id = e.id"
  + "                                   INNER JOIN rekv_z z ON d.id = z.id"
  + "WHERE  d.id = ?1 AND a.id = ?2 AND e.id = ?3", nativeQuery = true)
public List<RekvalZamestn> getRekvOsOnDoh(Long dhzmrk, Long prj, Long prje);
}

当我运行它时,结果是:

org.springframework.dao.InvalidDataAccessResourceUsageException: could not
extract ResultSet; SQL [n/a]; nested exception is
org.hibernate.exception.SQLGrammarException: could not extract ResultSet

当我运行SQL时,它会起作用,所以对我来说,问题不在于SQL,而在于@Query

2 个答案:

答案 0 :(得分:3)

您的查询,以单行格式(由于,erm,空格的原因将多个空格缩小到一个空格)等同于

SELECT z.* FROM rek_zm d INNER JOIN proj_a a ON d.id = a.prj_idcislo INNER JOIN proj_e e ON a.id = e.id INNER JOIN rekv_z z ON d.id = z.idWHERE  d.id = ?1 AND a.id = ?2 AND e.id = ?3

如果你像这样连接一行中的所有字符串,很明显你在WHERE子句之前缺少一个空格。

答案 1 :(得分:0)

假设SELECT z.* FROM类映射到表SELECT z FROM

RekvalZamestn更改为rekv_z