2013-10-25 63 views
4

使用Spring數據JPA,我試圖讓這種查詢(這是比較複雜的,這是一個簡單的例子)傳遞列表<Integer>春季數據JPA本機查詢

@Query(nativeQuery = true, 
     value = "SELECT * FROM events WHERE typeId IN (?1)") 
List<Event> findEventsByType(List<Integer> types); 

當我啓動查詢,異常引發:

org.postgresql.util.PSQLException: Can't infer the SQL type to use for an instance of java.util.ArrayList. Use setObject() with an explicit Types value to specify the type to use. 

我試圖名單<整數>整數[],[對象]和字符串,但它是不工作...

我不能傳值列表?

哪種做這種查詢的最佳方法是?

謝謝!

+0

這是一個相當古老的帖子,但你是否設法解決這個問題? –

回答

3

使用JPQL。原生查詢應該或者應該像創建SQL字符串一樣傳遞到數據庫,除非您的驅動程序可以獲取序列化的集合並且明白單個參數需要被解釋爲很多,否則它將不起作用。您傳入的集合需要基於集合中元素數量從(?)擴展到(?,?,...)的SQL,而JDBC驅動程序無法執行此操作,並且JPA提供程序需要按原樣執行字符串。

JPQL查詢允許JPA提供程序基於傳入的列表動態創建它所需的SQL,因此它可以爲您擴展集合。

0

嘗試查詢是這樣的:

@Query(nativeQuery = true, 
     value = "SELECT * FROM events WHERE typeId = ?1") 
List<Event> findEventsByType(List<Integer> types); 

有用嗎?