[英]Why I obtain this exception into a Spring Data JPA native SQL query? IllegalArgumentException: Parameter with that position [2] did not exist
[英]Parameter with that position [1] did not exist after moving the native query into a NamedNativeQuery?
為什么在移動 JPA 本機查詢時出現以下錯誤,當我將其移動到命名查詢時不再有效?
java.lang.IllegalArgumentException: Parameter with that position [1] did not exist
不工作的查詢:
@NamedNativeQuery(
name = Test.TEST,
query = "SELECT * FROM test_table where id = ?",
Query q = entityManager.createNativeQuery(Test.TEST);
q.setParameter(1, 362L);
List<Object> result = q.getResultList();
這有效:
Query q = entityManager.createNativeQuery("SELECT * FROM test_table where id = ?");
q.setParameter(1, 362L);
List<Object> result = q.getResultList();
因為你應該打電話:
Query q = entityManager.createNamedQuery(Test.TEST);
並不是
Query q = entityManager.createNativeQuery(Test.TEST);
如果你想移動你是本地查詢到命名的。 - 那么你將不得不做類似下面的事情。
考慮到您是示例,我有一個名為 Test 的類,我有一個本機查詢,我想將其轉換為命名的查詢,將其命名為“testQuery”
所以你是 TestRepository 看起來像下面它包含一個具有相同名稱的命名查詢的方法,進一步我們可以通過它的名字來調用它,所以它會指向你的namedQuery(name-testQuery)。
測試 testQuery(@param("id")int id)
下面是您的命名本機查詢,您可以將其放在實體上方
@NamedNativeQuery( name = Test.testQuery, query = "SELECT * FROM test_table where id = :id")
-Hop 它會有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.