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