Später gibt es mehr Informationen dazu, woher man eine EntityManagerFactory erhält . Erst einmal reicht es, davon auszugehen, dass diese initialisiert ist und einen EntityManager liefern kann. Wenn man mit Java SE Persistenz erreichen will, muss man sich außerdem um die Verwaltung der Datenbanktransaktionen kümmern, die man beginnen und beenden muss. Und so erstellt man eine Transaktion und beginnt sie:
Nun kann man den EntityManager auffordern, das Address-Objekt persistent zu machen:
Dann führt man den Befehl commit für die Transaktion aus und schließt den EntityManager;
Danach wird der Person eine ID zugewiesen und sie wird in die Datenbank geschrieben. Die Abfolge der Befehle get und commit für eine Transaktion ist typisch für jeden Code, der den persistenten Zustand von Objekten ändern will. Aus Gründen der Zuverlässigkeit sollte der Code wie folgt Exceptions auffangen und ein Rollback durchführen, falls es Probleme gibt:
Im Folgenden wird angenommen, dass dieser Code die Beispiele umschließt, wenn es um die Modifizierung der Datenbank geht. Zum Abrufen von Daten benötigt man nur den EntityManager.
Um die vorher gespeicherte Adresse abzurufen, kann man die ID als Referenz verwenden. Da man keine Transaktion vom EntityManager benötigt, ist die Sache ganz einfach:
Falls man eine Adresse nach Postleitzahl abrufen will, kann man die EJB Query Language (EJBQL) verwenden, um eine Abfrage zu definieren, aus welcher der EntityManager dann die Abfrage erzeugt.
Die Abfrage lässt sich erweitern, um Adressen zu finden (von allen persistenten Address-Objekten und sie gibt die Ergebnisse als Address-Objekte zurück), bei denen die Adresse eine Postleitzahl hat, welche mit dem „noch zu setzenden“ Parameter namens „param“ übereinstimmt. Diesen Parameter kann man jetzt festlegen:
Um das Ergebnis zu erhalten, ruft man die Methode getResultList für die Abfrage auf, wenn man mehrere Ergebnisse erhalten möchte, oder getSingleResult(), wenn man nur ein Ergebnis erwartet:
oder
Als Letztes fehlt noch die Möglichkeit, eine Adresse zu ändern und die Änderungen in die Datenbank zu übertragen. Vorausgesetzt wird, dass die obige Abfrage eine einzelne Adresse geliefert hat.
Und hier ein weiteres POJO namens Person, welches bereits mit Annotations zwecks Persistenz versehen ist:
Der wichtige Teil ist die @ManyToOne-Annotation für das Adressfeld. Die @ManyToOne-Annotation ist eine von mehreren, welche die Beziehung zwischen den einzelnen Entities beschreiben, in diesem Fall besagt sie, dass mehrere Personen dieselbe Adresse haben können. Dies muss jeweils eine Referenz auf eine bereits persistente Adresse sein.
Die merge-Methode kann auf intelligente Weise mit den übergebenen Entities umgehen: Wenn die Entity nicht gemanagt ist, wird sie persistent gemacht, andernfalls werden die Unterschiede ermittelt und die Datenbank wird entsprechend aktualisiert. Damit ist das persistent gemachte Person-Objekt entsprechend behandelt.
Neueste Kommentare
Noch keine Kommentare zu EJB-Persistenz mit Java SE
Kommentar hinzufügenVielen Dank für Ihren Kommentar.
Ihr Kommentar wurde gespeichert und wartet auf Moderation.