JPQL В пункте: массивы Java (или Списки, Наборы …)?

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

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

101
задан Pascal Thivent 8 May 2010 в 10:25
поделиться

1 ответ

Я не уверен в JPA 1.0, но вы можете передать коллекцию в 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 .

197
ответ дан 24 November 2019 в 04:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: