Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Objektrelationales Mapping mit JPA Advanced Topics Jonas Bandi Simon Martinelli.

Ähnliche Präsentationen


Präsentation zum Thema: "Objektrelationales Mapping mit JPA Advanced Topics Jonas Bandi Simon Martinelli."—  Präsentation transkript:

1 Objektrelationales Mapping mit JPA Advanced Topics Jonas Bandi Simon Martinelli

2 Lifecycle Callbacks Callbacks sind eine gängige Methode, um Einfluss auf den Lade- oder Speichervorgang von Objekten zu nehmen. Mögliche Events: PrePersist, PostPersist, PreRemove, PostRemove, PreUpdate, PostUpdate, PostLoad Beispiel: @Entity public class ImageMessage extends Message { @PrePersist @PreUpdate protected void compress(){... } @PostLoad @PostUpdate protected void uncompress() {... }

3 Entity Listeners Wenn Sie dieselbe Funktionalität bei Callbacks von verschiedenen Entities verweden wollen, können Sie einen Entity Listener erstellen: public class BaseEntityDebugListener { @PrePersist public void debugPrePersist(BaseEntity e) { log.debug("PrePresist: " + e); } } Entity Listener verwenden: @Entity @EntityListeners({BaseEntityDebugListener.class}) public class Employee extends BaseEntity

4 4Java Persistence API Synchronisation mit der Datenbank Das Zurückschreiben findet zum Commit-Zeitpunkt oder explizit mit der flush() Methode statt. Das Zurückschreiben beinhaltet kein Refresh allfälliger Änderungen in der Datenbank in der Zwischenzeit -> Lost Update! Das Zurückschreiben betrifft nur Änderungen, nicht ungeänderte Daten. Applikation m.setContent("A") tx.commit() m.setContent("C") tx.commit() SQL-Client update Message set content = 'B'; commit Zustand von m in Appl in DB A A A B C C

5 Optimistic Locking / Versionierung Die Versionierung im Rahmen von JPA ist als optimistsches Locking zu verstehen. Mit der Versionierung kann ein Concurrency Control über Transaktionen hinweg realisiert werden. Mit einer @Version können Lost Updates detektiert und vermieden werden: Das Feld kann int, Integer, short, Short, long, Long oder java.sql.Timestamp sein Beispiel @Entity public class Employee { @Version protected long version;... create table emp ( version bigint not null,...

6 Schema Generation Die Erzeugung von DDL kann, aber muss nicht durch eine Implementation der JPA Spezifikation angeboten werden. In der JPA Spezifikation sind verschiedene Angaben (Annotations und Attribute davon) vorgesehen, welche die Erzeugung von DDL-Befehlen ermöglichen. Beispiel: public class Message { @Column (unique = false, nullable=false, columnDefinition="varchar", lenghth=64 ) public BigDecimal sender; //...

7 The Metadata Puzzle Reihenfolge bei der Verarbeitung der Metadaten: 1.Annotations verarbeiten 2.Klassen aus XML Mapping hinzufügen 3.Attribute aus XML Mapping hinzufügen 4.Defaultwerte setzen

8 XML Mapping File (orm.xml) Rootelement ist entity-mappings:

9 Defaults im Mapping File Annotations ausschalten Persistence Unit Defaults schema catalog access cascade-persist entity-listeners Diese können auch ausgeschaltet werden exclude-default-listeners @ExcludeDefaultListeners

10 Defaults im Mapping File Mapping File Defaults package schema catalog access

11 Entity Mapping mit XML

12 12Java Persistence API Configuring Persistence Units Persistence Unit Name Transaction Type RESOURCE_LOCAL oder JTA Persistence Provider org.hibernate.ejb.HibernatePersistence Data Source nur bei JTA Mapping Files META-INF/queries.xml

13 13Java Persistence API Managed Classes 1.Lokale Klassen Alle annotierten Klassen im Deployment Unit in welcher das persistence.xml gepackt ist 2.Klassen in Mapping Files Mit XML gemappte Klassen 3.Explicitly Listed Classes Im persistence.xml eingetragene Klassen 4.Zusätzliche JARs mit Managed Classes Im persistence.xml unter jar-file eingetragene JARs

14 14Java Persistence API Properites zur Laufzeit übergeben Die properties im persistence.xml können ebenfalls zur Laufzeit beim Erstellen der EntityManagerFactory übergeben werden: Map props = new HashMap(); props.put("toplink.jdbc.user", "emp"); props.put("toplink.jdbc.password", "emp"); EntityManagerFactory emf = Persistence.createEntityManagerFactory( "EmployeeService", props);

15 Tools Dali Eclipse Workbench JBoss Tools


Herunterladen ppt "Objektrelationales Mapping mit JPA Advanced Topics Jonas Bandi Simon Martinelli."

Ähnliche Präsentationen


Google-Anzeigen