• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
JPA – Der Persistenz-­Standard in der Java EE und SE
 

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

on

  • 1,806 views

Die Abbildung relationaler Strukturen einer Datenbank auf die objekt­‐orientierte Programmiersprache Java bringt einige Herausforderungen mit sich, bekannt als object-­relational impedance ...

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.

Statistics

Views

Total Views
1,806
Views on SlideShare
1,408
Embed Views
398

Actions

Likes
0
Downloads
22
Comments
0

1 Embed 398

http://blog-de.akquinet.de 398

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

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

    • Der Persistenz-StandardJPA in der Java EE / SE Michael Bouschen akquinet AG michael.bouschen@akquinet.de
    • Ü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
    • Impedance Mismatch   OO Programmiersprache Relationale Algebra                 Copyright © 2013 – akquinet AG 31.01.2013 3
    • 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
    • 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 Copyright © 2013 – akquinet AG 31.01.2013 6
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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 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
    • 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
    • Ä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
    • Life  Cycle
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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