2010-03-24 15 views
9

Sono un po 'bloccato a costruire una query dinamica utilizzando CriteriaBuilder di JPA 2.0.Query dinamica JPA 2.0 utilizzando l'API criteri

ho un bel caso d'uso comune immagino: fornisce all'utente una quantità arbitraria di parametri di ricerca X di essere e/o concatenati: come:

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

Il Metodo o di CriteriaBuilder non è dinamica:

Predicato o (Predicato ... restrizioni)

Idee? Campioni?

risposta

7

Nel tuo caso, avrei preferito usare Expression#in(Collection) per evitare di dover ciclo e per costruire un 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)); 

si potrebbe voler controllare Basic Type-Safe Queries Using the Criteria API and Metamodel API per ulteriori dettagli.

+0

Ciao, Pascal Thivent, se i params è un subquery, come può scrivere il codice? –

1

in questo codice Foo_.name darà errore di compilazione. Poiché il campo non è dichiarato in questo. Non sono in grado di capirlo. Per favore suggeriscimi

-raghu

+3

L'esempio precedente si basa su un metamodello delle classi gestite dell'unità di persistenza (che può essere generato utilizzando un processore di annotazione fornito dall'implementazione JPA). Ma per favore, non postare domande come risposte nel thread esistente, apri invece una nuova domanda. –

Problemi correlati