2013-10-25 64 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); 

有用吗?