簡體   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