繁体   English   中英

Spring 带参数的数据本机查询不起作用

[英]Spring Data native query with params don't work

我有一个类似于以下的本机查询:

@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 )插入参数时,它会停止工作,给出我在上面更新的错误。

如果EmployeeStatusenum ,则必须在查询中使用它

WHERE e.status =:#{#status.name()}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM