Я - немного stucked построение динамического запроса с помощью CriteriaBuilder JPA 2.0.
У меня есть настоящий случай общего использования, который я предполагаю: Пользователь предоставляет произвольную сумму поисковых параметров X, чтобы быть и / или связан: как:
select e from Foo where (name = X1 or name = X2 .. or name = Xn )
Метод или CriteriaBuilder не является динамичным:
Предикат или (Предикат... ограничения)
Идеи? Образцы?
В вашем случае я бы предпочел использовать 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 метамодели для получения дополнительных сведений.
в этом коде Foo_.name будет выдавать ошибку компиляции. Поскольку поле в том не заявлено. Я не могу этого понять. Пожалуйста, предложите мне.
-рагу