Spring 数据 JPA @Query 注释,nativeQuery = true,
Spring Data JPA @Query annotation, nativeQuery = true,
我的@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
.
将 SELECT z.* FROM
更改为 SELECT z FROM
假设 RekvalZamestn
class 映射到 table rekv_z
.
您的查询,采用单行格式(将多个 space 压缩为一个 space,原因是 space),等同于
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
子句之前缺少 space。
我的@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
.
将 SELECT z.* FROM
更改为 SELECT z FROM
假设 RekvalZamestn
class 映射到 table rekv_z
.
您的查询,采用单行格式(将多个 space 压缩为一个 space,原因是 space),等同于
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
子句之前缺少 space。