У меня есть именованный параметр в 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, поэтому будет использоваться индекс ,
Прежде всего любая функция над * константой * не вредит. Только при применении по индексированному столбцу индекс не будет использоваться. –
Да, проблема в том, что индекс не используется, а запрос работает долго. – Hari
Вы пробовали только одно значение в списке IN? –