簡體   English   中英

將本機查詢移動到 NamedNativeQuery 后,該位置 [1] 的參數不存在?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM