2013-02-28 15 views
5

Ad esempio, l'API Criteri JPA può essere utilizzata senza metamodello generato. La sicurezza del tipo è andata persa, ma posso creare una query senza una precedente conoscenza del modello di dati utilizzando solo la reflection in fase di esecuzione. Mi piacerebbe usare Querydsl allo stesso modo. Non mi interessa la sicurezza del tipo, dal momento che non conosco il modello dei dati in anticipo.È possibile utilizzare Querydsl senza tipi di query generati?

Nel mio recente progetto mi piacerebbe utilizzare Querydsl principalmente perché costituisce un altro livello di persistenza. Quindi, si spera, posso usare le stesse query su JPA, JDO, JDBC, Lucene, Hibernate Search, MongoDB, Collections e RDFBean.

Oppure esiste qualche alternativa a Querydsl che può essere utilizzata in modo descritto?

Poiché i DB NoSQL sono in aumento. Esiste qualche altra struttura che costituisce un simile livello astratto su vari fornitori di persistenza?

risposta

5

Esistono due modi per utilizzare Querydsl senza un metamodello generato.

Il primo modo è quello di costruire le vostre espressioni manualmente http://www.querydsl.com/static/querydsl/2.9.0/reference/html/ch03.html#d0e1379

e il secondo è quello di utilizzare la funzionalità di Alias ​​di Querydsl http://www.querydsl.com/static/querydsl/2.9.0/reference/html/ch02s07.html

Le query Querydsl condividono interfacce comuni e si assomigliano, ma si puo' t utilizzare direttamente le stesse query su diversi tipi di persistenza, poiché Querydsl non fornisce alcuna astrazione di query tra i moduli.

È possibile condividere singole parti di query, ad esempio predicati o proiezioni, ma le query sono collegate a un determinato modulo.

Ciò che si può fare è attenersi a una delle comuni estensioni di persistenza JPA o JDO e utilizzare i motori RDBMS, OODB e NoSQL tramite questi.

+0

È un peccato che Querydsl non fornisca una tale astrazione sui moduli. Sarebbe molto utile e potrebbe spingere Querydsl in "alternativa LINQ nell'ecosistema java". C'è qualche ragione particolare per cui Querydsl non fornisce tale funzionalità? Perché le query differiscono tra i moduli? –

+0

LINQ fornisce anche questo? –

+1

Querydsl non ha lo scopo di fornire alcuna astrazione di persistenza, questo è il motivo principale, l'obiettivo principale è fornire una sintassi coerente per le query di persistenza. –

Problemi correlati