0
Der Persistenz-StandardJPA            in der Java EE / SE       Michael Bouschen          akquinet AG michael.bouschen@akq...
Über meine Person   	     Architekt und Projektleiter bei akquinet AG Berlin   Referenzimplementierung JPA 1   Mitglied JC...
Impedance Mismatch   	   OO Programmiersprache                            Relationale Algebra   	     	     	     	     	 ...
Impedance Mismatch (2)   Wo ist das Problem?   ¡  Klasse / Attribut -> Tabelle / Spalte    àJDBC   Aber   ¡  Persistent...
OR-Mapper   Implementierungen (Auswahl)               Copyright © 2013 – akquinet AG   31.01.2013   5
Persistenz in Java EE   	     BMP   CMP (EJB 1 CMP und EJB 2 CMP)   EJB 3.0: JPA   JPA: Spezifikation – kein Produkt      ...
JPA Historie   	     	     	     	     	      JPA 1.0                      JPA 2.0          JPA 2.1   	     Java EE 5     ...
JPA 1.0   Spezifikation   ¡  Teil der EJB 3.0 Spezifikation JSR 220   ¡  Separates Spezifikationsdokument   ¡  Linda De...
JPA 2.0   Spezifikation   ¡  Eigenständiger JSR: JSR-317   ¡  Linda DeMichiel (Sun)   ¡  Final Release: Dezember 2009  ...
JPA 2.1   Spezifikation   ¡  Eigenständiger JSR: JSR-338   ¡  Linda DeMichiel (Sun)   ¡  Public Review: Dezember 2012  ...
JPA Features  ¡  POJO-basiertes Persistenzmodell  ¡  Domainmodell unterstützt Vererbung, Polymorphie, etc.  ¡  Standard...
Entity Klassen – POJO  ¡  Kein Interface notwendig      (wie z.B. EntityBean)  ¡  Top-Level Klasse      (abstrakt oder k...
Objektrelationales Mapping   Allgemeines   ¡  Abbildung Java Klasse ↔ relationale Datenbank   ¡  Abbildung von Assoziati...
Entity Relationships              Copyright © 2013 – akquinet AG   31.01.2013   14
Mapping von Vererbung          	     	                   Copyright © 2013 – akquinet AG   31.01.2013   15
Mapping von Vererbung   	                                                                  PROJECT          SINGLE_TABLE  ...
EntityManager   Kommunikation JPA-Laufzeitumgebung   ¡  Zentrale Schnittstelle zur Datenbank   ¡  Life Cycle Methoden: p...
Änderungsoperationen   ¡  Nur innerhalb von Transaktionen   ¡  Create: em.persist(...)   ¡  Update:     –  Änderung der...
Life	  Cycle
Persistenzkontext   Laufzeitkonzept   ¡  Menge von „managed“ Entity Instanzen zur Laufzeit   ¡  Genau eine Enitity Insta...
Anfragesprache   Java Persistence Query Language (JPQL)                               Was      SELECT e.lastname      FROM...
JPQL  ¡  Syntax an SQL orientiert	      SELECT p FROM Project p JOIN p.employees e      WHERE p.firstname = :name    UPDA...
Query Erzeugung   ¡  Query Instanz repräsentiert Anfrage zur Laufzeit   ¡  EntityManager ist Query Factory:        Dynam...
Query	  Ausführung   Query q = em.createQuery(       "SELECT d FROM Department d");   List<Department> ds = (List<Departme...
Query Criteria API   ¡  API zur dynamischen Erzeugung von Queries   ¡  Keine String Manipulation   ¡  Typesafe Queries:...
Query Criteria API    Query q = em.createQuery(      "SELECT e FROM Employee e WHERE e.firstname = ‘Michael‘");    List<Em...
Persistence Unit   ¡  Menge von Entity Klassen   ¡  Definiert in META-INF/persistence.xml   ¡  Abgebildet auf genau ein...
JPA und Java EE   JPA als Standard Persistenz Konzept in Java EE   ¡  EntitiyManager injiziert oder per JNDI Lookup   ¡ ...
JPA und Java SE   ¡  Konfiguration persistence.xml     –  in META-INF oder im Classpath     –  muss alle Entity Klassen a...
Zusammenfassung  ¡  JPA = Java Persistenz Standard  ¡  Unabhängigkeit OR-Mapper und Datenbank  ¡  Verfügbar in Java EE ...
Ausblick JPA 2.1   ¡  Unterstützung Typ Konvertierung im OR-Mapping   ¡  Schema Generierung   ¡  Entity Graphs   ¡  Qu...
Links        mailto:michael.bouschen@akquinet.de        http://blog.akquinet.de/        @akquinet        http://jcp.org/en...
Upcoming SlideShare
Loading in...5
×

JPA – Der Persistenz-­Standard in der Java EE und SE

1,736

Published on

Die Abbildung relationaler Strukturen einer Datenbank auf die objekt­‐orientierte Programmiersprache Java bringt einige Herausforderungen mit sich, bekannt als object-­relational impedance mismatch. In Java ermöglicht JDBC zwar die Interaktion mir einer relationalen Datenbank aber nicht die Abbildung der Daten auf Objekte. Die bekannten Produkte wie Hibernate oder EclipseLink widmen sich diesem Problem bereits seit Jahren. Mit JPA hat der Java Community Process einen Standard für Java EE und SE definiert, der ein einheitliches API bietet, welches von den Anbietern unterstützt wird. Der Vortrag zeigt was JPA bietet und welche Vorteile der Standard für die Anwendungsentwicklung mit sich bringt.

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,736
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
28
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "JPA – Der Persistenz-­Standard in der Java EE und SE"

  1. 1. Der Persistenz-StandardJPA in der Java EE / SE Michael Bouschen akquinet AG michael.bouschen@akquinet.de
  2. 2. Über meine Person   Architekt und Projektleiter bei akquinet AG Berlin Referenzimplementierung JPA 1 Mitglied JCP Experten Gruppen: JPA 2.0, JPA 2.1, JDO 1, JDO 2 Apache committer JDO TCK   Copyright © 2013 – akquinet AG 31.01.2013 2
  3. 3. Impedance Mismatch   OO Programmiersprache Relationale Algebra                 Copyright © 2013 – akquinet AG 31.01.2013 3
  4. 4. Impedance Mismatch (2) Wo ist das Problem? ¡  Klasse / Attribut -> Tabelle / Spalte àJDBC Aber ¡  Persistente Identität ¡  Relationen ¡  Caches ¡  Anfragesprache Copyright © 2013 – akquinet AG 31.01.2013 4
  5. 5. OR-Mapper Implementierungen (Auswahl) Copyright © 2013 – akquinet AG 31.01.2013 5
  6. 6. Persistenz in Java EE   BMP CMP (EJB 1 CMP und EJB 2 CMP) EJB 3.0: JPA JPA: Spezifikation – kein Produkt Copyright © 2013 – akquinet AG 31.01.2013 6
  7. 7. JPA Historie           JPA 1.0 JPA 2.0 JPA 2.1   Java EE 5 Java EE 6 (Public Draft)       Mai 2006 Dez 2009 Dez 2012 Copyright © 2013 – akquinet AG 31.01.2013 7
  8. 8. JPA 1.0 Spezifikation ¡  Teil der EJB 3.0 Spezifikation JSR 220 ¡  Separates Spezifikationsdokument ¡  Linda DeMichiel (Sun), Michael Keith (Oracle) ¡  Final Release: Mai 2006 Implementierungen ¡  Referenzimplementierung: Oracle TopLink Essentials ¡  Hibernate, OpenJPA, TopLink, SAP, JPOX Copyright © 2013 – akquinet AG 31.01.2013 8
  9. 9. JPA 2.0 Spezifikation ¡  Eigenständiger JSR: JSR-317 ¡  Linda DeMichiel (Sun) ¡  Final Release: Dezember 2009 Implementierungen ¡  Referenzimplementierung: EclipseLink ¡  Hibernate, OpenJPA, EclipseLink, SAP, DataNucleus Copyright © 2013 – akquinet AG 31.01.2013 9
  10. 10. JPA 2.1 Spezifikation ¡  Eigenständiger JSR: JSR-338 ¡  Linda DeMichiel (Sun) ¡  Public Review: Dezember 2012 Implementierungen ¡  Referenzimplementierung: EclipseLink ¡  Hibernate, OpenJPA, EclipseLink, SAP, DataNucleus Copyright © 2013 – akquinet AG 31.01.2013 10
  11. 11. JPA Features ¡  POJO-basiertes Persistenzmodell ¡  Domainmodell unterstützt Vererbung, Polymorphie, etc. ¡  Standardisiertes objekt-relationales Mapping ¡  Anfragesprache ¡  Standardisiertes (Runtime-)API ¡  Verfügbar in Java EE und Java SE ¡  Unabhängigkeit von Datenbank und OR-Mapper Copyright © 2013 – akquinet AG 31.01.2013 11
  12. 12. Entity Klassen – POJO ¡  Kein Interface notwendig (wie z.B. EntityBean) ¡  Top-Level Klasse (abstrakt oder konkret) ¡  Entity und Nicht-Entity Klassen in Vererbungshierarchie ¡  Objekterzeugung mit new Copyright © 2013 – akquinet AG 31.01.2013 12
  13. 13. Objektrelationales Mapping Allgemeines ¡  Abbildung Java Klasse ↔ relationale Datenbank ¡  Abbildung von Assoziationen ¡  Mapping Metadaten als Annotationen oder XML ¡  Default Regeln z.B. für Tabellen- und Spaltennamen Annotationen ¡  Logisch: @Id, @OneToMany, @Transient, @Lob, ... ¡  Physikalisch: @Table, @SecondaryTable, @Column, ...   Copyright © 2013 – akquinet AG 31.01.2013 13
  14. 14. Entity Relationships Copyright © 2013 – akquinet AG 31.01.2013 14
  15. 15. Mapping von Vererbung     Copyright © 2013 – akquinet AG 31.01.2013 15
  16. 16. Mapping von Vererbung   PROJECT SINGLE_TABLE ID DISCR NAME CUST_ID DEPT_ID EXTERNAL_PROJECT INTERNAL_PROJECT TABLE_PER_CLASS ID NAME CUST_ID ID NAME DEPT_ID PROJECT JOINED ID NAME EXTERNAL_PROJECT INTERNAL_PROJECT ID CUST_ID ID DEPT_ID   Copyright © 2013 – akquinet AG 31.01.2013 16
  17. 17. EntityManager Kommunikation JPA-Laufzeitumgebung ¡  Zentrale Schnittstelle zur Datenbank ¡  Life Cycle Methoden: persist, remove, merge ¡  Zugriffsmethoden: find, getReference ¡  Query Methoden: createQuery, createNamedQuery, createNativeQuery ¡  Cache Methoden: flush, refresh, clear, contains ¡  Zugriff auf Transaktionen: getTransaction Copyright © 2013 – akquinet AG 31.01.2013 17
  18. 18. Änderungsoperationen ¡  Nur innerhalb von Transaktionen ¡  Create: em.persist(...) ¡  Update: –  Änderung der Entität (z.B. per Setter) –  Keine explizite save-Operation ¡  Delete: em.remove(...) ¡  Änderungen wirksam bei em.flush(), em.commit() Copyright © 2013 – akquinet AG 31.01.2013 18
  19. 19. Life  Cycle
  20. 20. Persistenzkontext Laufzeitkonzept ¡  Menge von „managed“ Entity Instanzen zur Laufzeit ¡  Genau eine Enitity Instanz per Identität ¡  Zugriff über EntityManager Interface ¡  Alle Instanzen sind auf die gleiche Datenbank abgebildet Persistenzkontext Typen ¡  Transaction ¡  Extended Copyright © 2013 – akquinet AG 31.01.2013 20
  21. 21. Anfragesprache Java Persistence Query Language (JPQL) Was SELECT e.lastname FROM Employee e Woher WHERE e.firstname = Michael   Welche Copyright © 2013 – akquinet AG 31.01.2013 21
  22. 22. JPQL ¡  Syntax an SQL orientiert   SELECT p FROM Project p JOIN p.employees e WHERE p.firstname = :name UPDATE Employee e SET e.salary = e.salary * 1.05 DELETE FROM Employee e WHERE e.name = Michael ¡  Domain-­‐Modell  (Klassen,  A2ribute,  Rela8onships)   ¡  Pfad-­‐Ausdrücke  e.department.company.name ¡  Query  Parameter   Copyright © 2013 – akquinet AG 31.01.2013 22
  23. 23. Query Erzeugung ¡  Query Instanz repräsentiert Anfrage zur Laufzeit ¡  EntityManager ist Query Factory: Dynamische Query: createQuery(String) Criteria API Query: createQuery(CriteriaBuilder) Statische Query: createNamedQuery(String) SQL Query: createNativeQuery(String) Copyright © 2013 – akquinet AG 31.01.2013 23
  24. 24. Query  Ausführung Query q = em.createQuery( "SELECT d FROM Department d"); List<Department> ds = (List<Department>)q.getResultList(); Query q = em.createQuery( "SELECT COUNT(d) FROM Department d"); Long count = (Long)q.getSingleResult(); Query q = em.createQuery( "UPDATE Employee e SET e.salary = e.salary * 1.05"; int changes = q.executeUpdate();   Copyright © 2013 – akquinet AG 31.01.2013 24
  25. 25. Query Criteria API ¡  API zur dynamischen Erzeugung von Queries ¡  Keine String Manipulation ¡  Typesafe Queries: Überprüfung zur Compile-Zeit ¡  Query Ergebnis ist getypt ¡  Option: String-based oder strongly- typed Copyright © 2013 – akquinet AG 31.01.2013 25
  26. 26. Query Criteria API Query q = em.createQuery( "SELECT e FROM Employee e WHERE e.firstname = ‘Michael‘"); List<Employee> emps= (List<Employee>)q.getResultList(); CriteriaBuilder cb = em.getCriteriaBuilder(); CriteriaQuery<Employee> cq = cb.createQuery(Employee.class); Root<Employee> e = cq.from(Employee.class); cq.select(e); cq.where(cb.equal(e.get(Employee_.firstname), "Michael")); TypedQuery<Employee> tq = em.createQuery(cq); List<Employee> results = tq.getResultList(); Copyright © 2013 – akquinet AG 31.01.2013 26
  27. 27. Persistence Unit ¡  Menge von Entity Klassen ¡  Definiert in META-INF/persistence.xml ¡  Abgebildet auf genau eine Datenbank ¡  Identifiziert durch eindeutigen Namen ¡  Definiert den Persistence Provider ¡  Kann Provider-spezifische Properties beinhalten Copyright © 2013 – akquinet AG 31.01.2013 27
  28. 28. JPA und Java EE JPA als Standard Persistenz Konzept in Java EE ¡  EntitiyManager injiziert oder per JNDI Lookup ¡  Transaktionskontrolle durch Container ¡  Container verwaltet und propagiert Persistenzkontext ¡  Automatisches Scannen der Entity Klassen während des Deployment § Copyright © 2013 – akquinet AG § 31.01.2013 § 28
  29. 29. JPA und Java SE ¡  Konfiguration persistence.xml –  in META-INF oder im Classpath –  muss alle Entity Klassen aufzählen ¡  Manuelle Transaktionskontrolle ¡  Bootstrap API javax.persistence.Persistence erzeugt EntityManagerFactory für Peristence Unit EntityManagerFactory emf = Persistence. createEntityManagerFactory(puName, properties); EntityManager em = emf.createEntityManager(); Copyright © 2013 – akquinet AG 31.01.2013 29
  30. 30. Zusammenfassung ¡  JPA = Java Persistenz Standard ¡  Unabhängigkeit OR-Mapper und Datenbank ¡  Verfügbar in Java EE und Java SE ¡  JPA 2.1 Public Draft Copyright © 2013 – akquinet AG 31.01.2013 30
  31. 31. Ausblick JPA 2.1 ¡  Unterstützung Typ Konvertierung im OR-Mapping ¡  Schema Generierung ¡  Entity Graphs ¡  Query Erweiterungen: JOIN ON, Datenbank-Funktionen, Downcast, SubQueries in Expressions, ... ¡  Unterstützung für Stored Procedures ¡  Criteria API: delete und update ¡  Nicht-synchronisierter Persistenzkontext ¡  CDI Injection in Entity Listener ¡  Annotationen für Index und ForeignKey Copyright © 2013 – akquinet AG 31.01.2013 31
  32. 32. Links mailto:michael.bouschen@akquinet.de http://blog.akquinet.de/ @akquinet http://jcp.org/en/jsr/detail?id=338 http://java.net/projects/jpa-spec/lists/users/archive Copyright © 2013 – akquinet AG 31.01.2013 32
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×