JPA / Hibernate: convalida basata su codice delle query jpa
Domanda
Qual è il modo giusto per convalidare una query jpa a livello di codice. Hibernate convalida tutte le query denominate basate su annotazioni su entità. Ma come posso chiamare questa routine di validazione su query jpa costruite a livello di codice, per verificare la presenza di errori?
@Entity public class Foo { @Id public int id; public String name; }
main(...) { Query q = getEntityManager().createQuery("select e from " + Foo.class.getName() + " e where e.name = 'x' "); // validate q here }
Soluzione
Non farlo. L'integrazione mette alla prova il tuo codice, usando un vero database con lo stesso schema del tuo ambiente di produzione.
Pensaci: se crei una query non valida, si tratta di un bug di programmazione . Che cosa hai intenzione di fare con le informazioni? Dire all'utente che una query JPA non è valida? Tutto ciò che puoi realisticamente fare è registrare l'errore e dire all'utente "è successo qualcosa di brutto". Saprai che è una query non valida quando controlli comunque i log in seguito ...
Modifica
Potrebbe anche valere la pena indagare sulla chiamata createQuery ()
fornendo dati errati: javadoc qui suggerisce che può lanciare un HibernateException
, e non sono sicuro cosa potrebbe fare con una stringa diversa dalla convalida ...
Altri suggerimenti
O puoi usare createQuery o devi inserire il nome della tua classe mentre scrivi un JPQL.