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.

Page: 1 2 3 4

ZDNet.de Redaktion

Recent Posts

DMA: EU stuft auch Apples iPadOS als Gatekeeper ein

Eine neue Analyse der EU-Kommission sieht vor allem eine hohe Verbreitung von iPadOS bei Business-Nutzern.…

5 Tagen ago

Chips bescheren Samsung deutlichen Gewinnzuwachs

Das operative Ergebnis wächst um fast 6 Billionen Won auf 6,64 Billionen Won. Die Gewinne…

5 Tagen ago

Chrome: Google verschiebt das Aus für Drittanbietercookies

Ab Werk blockiert Chrome Cookies von Dritten nun frühestens ab Anfang 2025. Unter anderem gibt…

6 Tagen ago

BAUMLINK: Wir sind Partner und Aussteller bei der Frankfurt Tech Show 2024

Die Vorfreude steigt, denn BAUMLINK wird als Partner und Aussteller bei der Tech Show 2024…

6 Tagen ago

Business GPT: Generative KI für den Unternehmenseinsatz

Nutzung einer unternehmenseigenen GPT-Umgebung für sicheren und datenschutzkonformen Zugriff.

6 Tagen ago

Alphabet übertrifft die Erwartungen im ersten Quartal

Der Umsatz steigt um 15 Prozent, der Nettogewinn um 57 Prozent. Im nachbörslichen Handel kassiert…

1 Woche ago