JPA类型查询集参数

时间:2014-10-15 16:17:19

标签: java spring oracle java-ee jpa

我在JPA类型查询中有一个命名参数。我在条件中设置了一个值列表。

我正在设置一个整数列表,但是当JPA将类型化查询转换为相应的sql查询时,它会添加一个to_number函数,并且不会使用该表的索引。

 List<Integer> studentIds=ArrayList<Integer>
 //Student id is number in database and indexed.     
 query = "SELECT T.* FROM STUDENT WHERE STUDENT_ID IN (:studentIds)" 
 TypedQuery<Object[]> typedQuery = entityManager().createQuery( query, Object[].class);
 typedQuery.setParameter("studentIds", studentIds);

问题是当JPA生成查询时,它正在添加to_number函数来转换列表

SELECT * from student t4 where student_id in (?,?,?);
 filter("T4"."student_id"=TO_NUMBER(:9) OR "T4"."student_id"=TO_NUMBER(:10) OR 
  "T4"."student_id"=TO_NUMBER(:11) OR "T4"."PRODUCT_SET_ID"=student_id(:12) 

有任何想法如何确保JPA不添加to_number函数,因此将使用索引。

1 个答案:

答案 0 :(得分:1)

当我将值传递给&#39; .in&#39;时,我不得不使用数组。谓语。试试这个:

List<Integer> studentIds=ArrayList<Integer>
Integer[] ids = new Integer[studentIds.size()];
ids = studentIds.toArray(ids);
//Student id is number in database and indexed.     
query = "SELECT T.* FROM STUDENT WHERE STUDENT_ID IN (:studentIds)"
TypedQuery<Object[]> typedQuery = entityManager().createQuery( query, Object[].class);
typedQuery.setParameter("studentIds", ids);