13 Stimmen

Ausführen einer Abfrage zum Erstellen von Tabellen über den JPA EntityManager

Ich muss eine neue Tabelle in einer Datenbank erstellen, auf die ich über einen JPA EntityManager zugreife. Unterstützen JPA NativeQueries andere Abfragen als "Select" oder "Update"? Oder gibt es einen anderen modernen Weg, um eine komplexe SQL-Abfrage in einem JPA-Kontext auszuführen?

19voto

Augusto Punkte 27549

Die "nativen Abfragen" von jpa können nur für DML-Anweisungen (Data Manipulation Language) verwendet werden. Für DDL-Anweisungen, wie z. B. das Erstellen einer Tabelle, müssen Sie die zugrunde liegende Verbindung vom EntityManager abrufen.

Wie die Verbindung aus dem EM extrahiert wird, hängt von der JPA-Implementierung ab, die Sie verwenden, beinhaltet aber auf jeden Fall den Aufruf von EntityManager.getDelegate().

Alternativ (und ich denke, es ist ein besserer Ansatz), injizieren Sie die DataSource oder ein JDBCTemplate, wenn Sie Spring verwenden, um das Objekt, das versucht, die Tabelle zu erstellen, und verwenden Sie diese Klasse, um die Tabelle zu erstellen.

9voto

Dimitri S. Punkte 138

In JPA (zumindest in Hibernate) können Sie DDL-Anweisungen direkt ausführen, indem Sie createNativeQuery() und executeUpdate() wie folgt verwenden:

EntityManager em = ...;
em.createNativeQuery("CREATE TABLE FOO (FOO_ID NUMBER)").executeUpdate();
em.createNativeQuery("DROP TABLE FOO").executeUpdate();

Es ist nicht ideal, aber es ist machbar.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X