【发布时间】:2020-12-10 20:15:36
【问题描述】:
我有一个类似于以下的本机查询:
@Query(value = "SELECT * FROM (" +
" SELECT result.*, ROWNUM rn FROM (" +
" SELECT tmp.* FROM (" +
" SELECT " +
" e.id, " +
" e.employee_number, " +
" d.name, " +
" d.surname " +
" FROM employee e INNER JOIN detail d ON e.id_detail = d.id " +
" WHERE e.status = :status " +
" ) tmp " +
" ORDER BY :sortColumn :sortDirection " +
" ) result " +
" WHERE ROWNUM <= (:pageIndex + :pageSize) " +
") " +
"WHERE rn > :pageIndex "
, nativeQuery = true)
ArrayList<Object> getEmployeeDetails( @Param("status") EmployeeStatus status,
@Param("pageSize") int pageSize,
@Param("pageIndex") int pageIndex,
@Param("sortDirection") String sortDirection,
@Param("sortColumn") String sortColumn);
我收到以下错误:
org.springframework.dao.InvalidDataAccessResourceUsageException: could not extract ResultSet; SQL [n/a]; nested exception is org.hibernate.exception.SQLGrammarException: could not extract ResultSet
// ...
Caused by: org.hibernate.exception.SQLGrammarException: could not extract ResultSet
// ...
Caused by: java.sql.SQLSyntaxErrorException: ORA-01745: invalid host/bind variable name
我尝试的是不同的返回类型(并没有设法找出最终使用哪一个),插入带有 @Param() 注释的参数。
查询本身确实有效 - 我直接在数据库中尝试过,但在 Spring 中处理它时遇到了问题。
查询本身便于调试:
SELECT * FROM (
SELECT result.*, ROWNUM rn FROM (
SELECT tmp.* FROM (
SELECT
e.id,
e.employee_number,
d.name,
d.surname
FROM employee e INNER JOIN detail d ON e.id_detail = d.id
WHERE e.status = 'status'
) tmp
ORDER BY tmp.name desc
) result
WHERE ROWNUM <= (0 + 5)
)
WHERE rn > 0
编辑:
我已经更新了问题,并添加了删除所有 \n 并检查缺失空格的评论建议。
不使用任何参数的普通查询也可以,但是当我开始通过 @Param() 注释或绑定 (?1) 插入参数时,它会停止工作,给出我上面更新的错误。
【问题讨论】:
-
首先从查询中删除所有\n。其次,我认为这不起作用 tmp.?5。尝试将其删除以进行测试
-
删除了每个
\n,我在注释中放置了静态查询并且它工作但是当我开始弄乱参数时它会报错 -
使用
?2我得到java Caused by: org.hibernate.QueryException: Ordinal parameter not bound : 2并使用:pageSize-java Caused by: java.lang.IllegalStateException: Using named parameters for method public abstract java.util.ArrayList (.....) but parameter 'Optional[status]' not found in annotated query 'SELECT * (......) -
问题出在格式上。尝试在 d.surname 之后留出空格。
-
在应用您的建议后,我已经用最新的错误更新了这个问题 - 仍然没有设法使它工作..
标签: java hibernate spring-data-jpa nativequery