简体   繁体   English

JPA类型查询集参数

[英]JPA Typed query set parameter

I have a named parameter in JPA typed query. 我在JPA类型的查询中有一个命名参数。 I am setting a list of value in condition. 我正在设置条件清单。

I am setting a list of integer, but when JPA converts typed query to corresponding sql query it is adding a to_number function and index of the table is not used. 我正在设置一个整数列表,但是当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);

The issue is when JPA generates the query it is adding to_number function to convert the list 问题是,当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) 

Any thoughts how to make sure JPA does not add a to_number function, so index will be used. 如何确保JPA不会添加to_number函数的任何想法,因此将使用index。

I had to use an array when I was passing values into a '.in' predicate. 将值传递到“ .in”谓词时,必须使用数组。 Try this: 尝试这个:

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);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM