JPA / Hibernate: Code basierte Validierung von JPA-Abfragen
Frage
Was ist der richtige Weg, um eine JPA-Abfrage programmatisch validiere. Hibernate validiert alle Annotation basierend benannte Abfragen für Entitäten. Aber wie kann ich diese Validierungsroutine rufen programmatisch builded JPA-Abfragen, auf Fehler zu überprüfen?
@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 }
Lösung
Nicht. Integration testet die Hölle aus Ihrem Code, eine echte Datenbank mit dem gleichen Schema wie die Produktionsumgebung verwendet wird.
Denken Sie daran: wenn Sie eine fehlerhafte Abfrage erstellen, das ist ein Programmfehler . Was werden Sie mit den Informationen zu tun? Sagen Sie den Benutzer, der eine JPA-Abfrage fehlerhaft ist? Alles, was Sie realistischerweise tun können, ist das Fehlerprotokoll und den Benutzer „etwas Schlimmes passiert ist“ sagen. Sie wissen, es ist eine fehlerhafte Abfrage, wenn Sie die Protokolle versuchen Sie es später sowieso ...
Bearbeiten
Es könnte sich auch lohnen, die createQuery()
Aufruf Untersuchung durch schlechte Daten füttern - die javadoc
Andere Tipps
Sie können entweder Create verwenden, oder Sie benötigen, um Ihre Klassennamen zu setzen, während ein JPQL zu schreiben.