Вопрос

Я хотел бы загрузить все объекты, которые имеют текстовую тег, установленный на любой из небольшого, но произвольного количества значений из нашей базы данных. Логичный способ пойти в это в SQL будет создать предложение «в». JPQL допускает в том, что он, похоже, требует, чтобы указать каждый параметр в непосредственном (как в »в (: in1,: in2,: in3)").

Есть ли какой-то способ указать массив или список (или какой-то другой контейнер), который должен быть развернут для значений значения AN?

Это было полезно?

Решение

Я не уверен на JPA 1.0, но вы можете пройти Collection В JPA 2.0:

String qlString = "select item from Item item where item.name IN :names"; 
Query q = em.createQuery(qlString, Item.class);

List<String> names = Arrays.asList("foo", "bar");

q.setParameter("names", names);
List<Item> actual = q.getResultList();

assertNotNull(actual);
assertEquals(2, actual.size());

Проверено с EclipseLink. С помощью Hibernate 3.5.1 вам нужно будет окружить параметр с скобками:

String qlString = "select item from Item item where item.name IN (:names)";

Но это ошибка, запрос JPQL в предыдущем образце является действительным JPQL. Видеть HHH-5126..

Другие советы

Предел Oracle составляет 1000 параметров. Проблема была решена с помощью Hibernate в версии 4.1.7, хотя путем разделения прошедшего списка параметров в наборах 500 Смотреть Jira HHH-1123

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top