Pergunta

Estou um pouco preso construindo uma consulta dinâmica usando o critério do JPA 2.0.

Eu tenho um caso de uso bastante comum, eu acho: o usuário fornece uma quantidade arbitrária de parâmetros de pesquisa x para ser e / ou concatenada: como:

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

O método ou de critério não é dinâmico:

Predicado ou (predicado ... restrições)

Ideias? Amostras?

Foi útil?

Solução

No seu caso, eu prefiro usar Expression#in(Collection) para evitar ter que fazer loop e construir um composto Predicate dinamicamente:

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));

Você pode querer verificar Consultas básicas à segurança do tipo usando a API de critérios e API de metamodelo para mais detalhes.

Outras dicas

Neste código foo_.name vai dar um erro de compilação. Como o campo não é declarado nisso. Não sou capaz de entender isso. Por favor me sugira.

-raghu

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top