EJB-Persistenz mit Java SE

Um das Address-Objekt persistent zu machen, ist ein EntityManager nötig, welchen man für jede Aufgabe erhält, die mit den persistenten Daten durchgeführt werden soll. Dies ist der große Unterschied zwischen Persistenz unter Java EE und Java SE. In Java EE gibt es Annotations, welche es dem umgebenden Framework ermöglichen, die Entities zu verwalten. In Java SE wird die Verantwortung hierfür dem Entwickler überlassen, der sich um einen EntityManager kümmern muss. Einen EntityManager erhält man von einer EntityManagerFactory.


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.

Themenseiten: Anwendungsentwicklung, Software

Fanden Sie diesen Artikel nützlich?
Content Loading ...
Whitepaper

Artikel empfehlen:

Neueste Kommentare 

Noch keine Kommentare zu EJB-Persistenz mit Java SE

Kommentar hinzufügen

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *