Динамический запрос JPA 2.0 с помощью Критериев API

Я - немного stucked построение динамического запроса с помощью CriteriaBuilder JPA 2.0.

У меня есть настоящий случай общего использования, который я предполагаю: Пользователь предоставляет произвольную сумму поисковых параметров X, чтобы быть и / или связан: как:

select e from Foo where (name = X1 or name = X2 .. or name = Xn )

Метод или CriteriaBuilder не является динамичным:

Предикат или (Предикат... ограничения)

Идеи? Образцы?

9
задан Pascal Thivent 27 March 2010 в 21:48
поделиться

2 ответа

В вашем случае я бы предпочел использовать Expression # in (Collection) , чтобы избежать цикла и построения соединения Предикат динамически:

CriteriaBuilder cb = em.getCriteriaBuilder();

CriteriaQuery<Foo> cq = cb.createQuery(Foo.class);
Metamodel m = em.getMetamodel();
EntityType<Foo> Foo_ = m.entity(Foo.class);
Root<Foo> foo = cq.from(Foo_);
cq.where(my.get(Foo_.name).in(params));

Вы можете проверить Базовые типы безопасных запросов с использованием API критериев и API метамодели для получения дополнительных сведений.

7
ответ дан 4 December 2019 в 22:28
поделиться

в этом коде Foo_.name будет выдавать ошибку компиляции. Поскольку поле в том не заявлено. Я не могу этого понять. Пожалуйста, предложите мне.

-рагу

1
ответ дан 4 December 2019 в 22:28
поделиться
Другие вопросы по тегам:

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