2010-06-21 4 views
25

Was ist die korrekte Syntax einer JPA-Anweisung? Das hört sich nach einer einfachen Frage an, aber ich konnte keine Antwort finden.JPA Insert-Anweisung

Ich weiß, wie es aus Java-Code zu tun, aber ich suche nach einer Möglichkeit, Objekte in die Datenbank einzufügen, wenn die Datenbank erstellt wurde.

Irgendwelche Ideen?

+0

Hier ist ein guter Fall, wo die am wenigsten richtige Antwort als die richtige Lösung markiert ist. Bitte beachten Sie, dass die Markierung entweder "frm" oder "Ben Hoffstein" lautet. –

Antwort

1

Die Option, die bisher vielversprechender aussieht, verwendet Flyway. Es ist ein automatisierter Weg und erledigt den Upgrade-Prozess von Datenbanken grundsätzlich automatisch.

26

In JPA gibt es keine INSERT-Anweisung. Sie müssen neue Entitäten mit einem EntityManager einfügen. Die einzigen in JPA zulässigen Anweisungen sind SELECT, UPDATE und DELETE.

+1

Ich habe Native SQL für diesen Zweck verwendet, aber wie kann dies für alle Datenbankanbieter geschrieben werden? Hibernate verfügt über eine solche Funktion. Sie können eine Datei namens "import.sql" in den Laufzeitklassenpfad von Hibernate einfügen. Zum Zeitpunkt des Schema-Exports führt er die in dieser Datei enthaltenen SQL-Anweisungen aus, nachdem das Schema exportiert wurde. Ich bin auf der Suche nach etwas mehr generischer Ansatz, wie ich Eclipselink benutze. – javydreamercsw

16

Hier ist eine good reference auf persistente JPA-Objekte mit einem EntityManager. Als Beispiel ist dies, wie Objekte einzufügen, um das Verfahren bestehen mit:

EntityManager em = getEntityManager(); 
em.getTransaction().begin(); 

Employee employee = new Employee(); 
employee.setFirstName("Bob"); 
Address address = new Address(); 
address.setCity("Ottawa"); 
employee.setAddress(address); 

em.persist(employee); 

em.getTransaction().commit(); 
+1

Wie ich bereits erwähnt habe, weiß ich, wie man es von Java aus macht. Ich suche nach einer Möglichkeit, Standard-Einfügungen zu verwenden, wenn die Datenbank erstellt wird, außer sie in Java zu kodieren. – javydreamercsw

+0

Gotcha - Entschuldigung, missverstanden die Frage. –

+0

Kein Problem. Trotzdem danke! – javydreamercsw

5

Wenn Sie in die Datenbank Daten einfügen möchten außerhalb Java müssen Sie nativen SQL verwenden. Verwenden Sie SQL Standard, um sicherzustellen, dass die meisten Datenbanken das Skript ausführen können. Wenn die Anwendung ausgeführt wird, erstellt JPA die neuen Daten und wandelt sie bei Bedarf in Objekte um.

Wie stellen Sie sicher, dass das Skript in allen Datenbanken funktioniert? Nun, das ist das gleiche Problem, das jeder DBA hat, wenn er Storeprozeduren oder native Abfragen macht ... deshalb gibt es JPA, um zu vermeiden, dass es direkt in SQL gemacht wird, aber ich weiß, dass es manchmal so gebraucht wird.

Ich empfehle Ihnen, 3 Hauptskripte zu machen. Eine für Oracle, eine für SQL Server (es gibt einige Probleme in den Datums-Datentypen von 2005 bis 2008, seien Sie also vorsichtig) und eine für MySQL. Starten Sie Ihr Skript mit Standard-SQL und wenn Sie es in diesen Datenbanken testen, finden Sie einige Korrekturen, die Sie für jedes DBMS durchführen müssen.

Man hat es geschafft, man kann eine Datei Skript (* .sql) Datei erstellen und sie mit dem DB Manager ausführen. Wenn es funktioniert, den Server laufen lassen, die App online stellen und die Daten werden gut integriert.

+0

So habe ich es gemacht. Ich suchte nach einem automatischen Weg, aber ich musste es programmieren, um diese Art von Arbeit zu machen. – javydreamercsw