Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.
<Insert Picture Here>JavaTM Persistence API 2.0: An OverviewSanjeeb SahooSr. Staff Engineer, Sun, an Oracle Company
The following/preceding is intended to outlineour general product direction. It is intended for  information purposes only...
JavaTM Persistence API: Brief History• Java Persistence 1.0  – Standardized object/relational mapping for Java    applicat...
Key Interfaces• EntityManagerFactory  – Used to create entity managers  – One entity manager factory per persistence unit•...
Packaging• Java SE (Standalone Java Application)  – Jar file with entities, application classes and META-    INF/persisten...
Bootstrapping• Java SE (Standalone Java Application)  – Persistence.createEntityManagerFactory• Java EE  – @PersistenceCon...
JavaTM Persistence 2.0:New Features•   Expanded modeling capabilities•   Additional O/R mapping options•   Additions to Ja...
Object/Relational Mapping Essentials• Entities• Basic types  • Strings, integers, floats, decimals, …• Embeddable classes ...
JavaTM Persistence 2.0: Expanded modeling and mapping• Collections of basic types• Collections of embeddables• Richer supp...
JavaTM Persistence 2.0: Expanded modeling and mapping• Derived identities  – Improved modeling for overlapping primary and...
Collections of Basic Types and Embeddables• Collections of strings, integers, etc.• Collections of embeddables (e.g., Addr...
Collections of Basic Types@Entitypublic class Person {    @Id protected String ssn;    protected String name;    protected...
Collections of Basic Types   PERSON   SSN   NAME    BIRTHDATE                 PERSON_NICKNAMES                 PERSON_SSN ...
Collections of Embeddable Types@Entity public class Landlord {    @Id String taxId;    String name;    @ElementCollection ...
Collections of Embeddable Types  LANDLORD  TAXID   NAME       …           RENTALS          LANDLORD_TAXID   STREET   CITY ...
Multiple Levels of Embedding@Entity public class Employee {      @Id int empId;      String name;      ContactInfo contact...
Embeddables with Relationships@Entity public class Employee {      @Id int empId;      String name;      ContactInfo conta...
Persistently Ordered Lists• Order is maintained in database by provider  – Uses additional (integral) ordering column• Spe...
Persistently Ordered Lists@Entity public class CreditCard {   @Id String cardNumber;   @ManyToOne Customer customer;   ......
OrderColumn CREDITCARD CARDNUMBER   …              CARDTRANSACTION              CARDID   ID   TXDATE   …   TXORDER        ...
@OrderBy Alternative@Entity public class CreditCard {   @Id String cardNumber;   @ManyToOne Customer customer;   ...   @On...
Generalized Maps• Map key can be  – Basic type  – Embeddable  – Entity• Map value can be  – Basic type  – Embeddable  – En...
Generalized Maps• Map collection is specified with  – @ElementCollection, @OneToMany, @ManyToMany  – Annotation is determi...
Generalized Maps@Entitypublic class VideoStore {   @Id Integer storeId;   Address location;   @ElementCollection   @Collec...
Generalized Maps  VIDEOSTORE  STOREID   NAME    STREET   CITY   STATE   …                     MOVIE                     TI...
Automatic Orphan Deletion• Deletion of related entities when removed from  relationship  – For entities logically “owned” ...
Orphan Deletion@Entitypublic class Order {   @Id int orderId;   ...   @OneToMany(cascade=PERSIST, orphanRemoval=true)   Se...
Java Persistence Query Language:New Functionality• Support for all new modeling and mapping  features• Operators and funct...
New Operators• INDEX  – For ordered lists• KEY, VALUE, ENTRY  – For maps• CASE, COALESCE, NULLIF  – For case expressions a...
Restricted Polymorphism,Collection-valued Input ParametersSELECT eFROM Employee eWHERE TYPE(e) IN (PartTime, Contractor)SE...
Criteria API• Object-based API for building queries• Designed to mirror JPQL semantics• Strongly typed  – Based on type-sa...
Criteria API: Core Interfaces• CriteriaQuery  – Represents a query definition object  – Used to add / replace / browse con...
Criteria API: Core Interfaces• Join, ListJoin, MapJoin,…  – Joins from a root or existing join• Path  – Navigation from a ...
The World’s Simplest Query  SELECT c  FROM Customer c  CriteriaBuilder cb = ...;  CriteriaQuery<Customer> cq = cb.createQu...
Joins and Navigation  SELECT c  FROM Customer c join c.orders o  CriteriaBuilder cb = ...;  CriteriaQuery<Customer> cq   =...
Joins and Navigation: What’s the Problem?  SELECT c  FROM Customer c join c.orders o  CriteriaBuilder cb = ...;  CriteriaQ...
Metamodel• Abstract, “schema-level” view of managed  classes of persistence unit  – Entities, mapped superclasses, embedda...
Type-safe Navigation  SELECT c  FROM Customer c join c.orders o  CriteriaBuilder cb = ...;  CriteriaQuery<Customer> cq   =...
Optimistic Locking• Assumes read-committed isolation, deferred  writes  – Short term read-locks  – Long term write-locks• ...
Pessimistic Locking• Grab database locks upfront• Lock Modes  – PESSIMISTIC_READ  – PESSIMISTIC_WRITE  – PESSIMISTIC_FORCE...
Pessimistic Locking@Stateless public class HRBean {   ...   @PersistenceContext EntityManager em;   ...   public void give...
Locking APIs• EntityManager methods: lock, find, refresh• Query / TypedQuery methods: setLockMode,  setHint• NamedQuery an...
Second Level Cache APIs• APIs and control options added for portability• Cache interface methods: evict, evictAll, contain...
Validation• Leverages work of Bean Validation JSR (JSR 303)• Automatic validation upon lifecycle events  – PrePersist  – P...
Validation@Entity public class Employee {    @Id Integer empId;    @NotNull String name;    Float salary;    @Max(15) Inte...
Standard Configuration Properties•   javax.persistence.jdbc.driver•   javax.persistence.jdbc.url•   javax.persistence.jdbc...
JPA 2.1 Candidate Features    http://jcp.org/en/jsr/detail?id=338                                             NEW     Mul...
Summary•   Expanded modeling capabilities•   Additional O/R mapping options•   Additions to Java Persistence query languag...
Resources• Java Persistence 2.0 Specification   http://jcp.org/en/jsr/detail?id=317• Reference Implementation is EclipseLi...
The following/preceding is intended to outlineour general product direction. It is intended for  information purposes only...
Nächste SlideShare
Wird geladen in …5
×

Java Persistence API 2.0: An Overview

3.523 Aufrufe

Veröffentlicht am

Presentation made at JavaONE, Hyderabad, on 10th May 2011. Slides are a slightly modified version of what's presented by Linda D. at JavaONE, SF, in 2010.

Veröffentlicht in: Technologie, Bildung
  • Als Erste(r) kommentieren

Java Persistence API 2.0: An Overview

  1. 1. <Insert Picture Here>JavaTM Persistence API 2.0: An OverviewSanjeeb SahooSr. Staff Engineer, Sun, an Oracle Company
  2. 2. The following/preceding is intended to outlineour general product direction. It is intended for information purposes only, and may not be incorporated into any contract. It is not a commitment to deliver any material, code, orfunctionality, and should not be relied upon in making purchasing decisions. The development, release, and timing of anyfeatures or functionality described for Oracle’s products remains at the sole discretion of Oracle. 2
  3. 3. JavaTM Persistence API: Brief History• Java Persistence 1.0 – Standardized object/relational mapping for Java applications – Available as part Java EE 5 Platform or standalone – Covered most of the essential features• Java Persistence 2.0 – More and better increased application portability – Released in December 2009 – Available as part of Java EE 6 Platform or standalone – Reference Implementation is EclipseLink – Available as part of GlassFish v3 3
  4. 4. Key Interfaces• EntityManagerFactory – Used to create entity managers – One entity manager factory per persistence unit• EntityManager • Used to manage persistence context • Entities read/written from database • Operations: persist, remove, find, refresh, createQuery,…• Query, TypedQuery • Used for query configuration, parameter binding, query execution 4
  5. 5. Packaging• Java SE (Standalone Java Application) – Jar file with entities, application classes and META- INF/persistence.xml• Java EE – War file • WEB-INF/classes/META-INF/persistence.xml • WEB-INF/lib/entities.jar (with META-INF/persistence.xml) – EJB jar • EJBs and entities and META-INF/persistence.xml – EAR file • lib/entities.jar with META-INF/persistence.xml 5
  6. 6. Bootstrapping• Java SE (Standalone Java Application) – Persistence.createEntityManagerFactory• Java EE – @PersistenceContext EntityManager em; – @PersistenceUnit EntityManagerFactory emf; 6
  7. 7. JavaTM Persistence 2.0:New Features• Expanded modeling capabilities• Additional O/R mapping options• Additions to Java Persistence query language• Metamodel API• Criteria API• Pessimistic locking• Standardization of many configuration options• Support for validation 7
  8. 8. Object/Relational Mapping Essentials• Entities• Basic types • Strings, integers, floats, decimals, …• Embeddable classes • E.g., Address• Relationships • One-to-one, one-to-many/many-to-one, many-to-many • Collections modeled with java.util Collection, Set, List, or Map • Customized via metadata: @JoinColumn, @JoinTable, etc.• Inheritance • Single table, joined subclass, table per class (optional) 8
  9. 9. JavaTM Persistence 2.0: Expanded modeling and mapping• Collections of basic types• Collections of embeddables• Richer support for embeddable classes – Multiple levels of embedding – Embeddable classes with relationships• Persistently ordered lists• Improved map support – Joins with additional columns – Ternary relationships• Orphan deletion 9
  10. 10. JavaTM Persistence 2.0: Expanded modeling and mapping• Derived identities – Improved modeling for overlapping primary and foreign keys• Combinations of access types• Expanded relationship mapping options – Unidirectional one-many foreign key mappings – One-one, many-one/one-many join table mappings 10
  11. 11. Collections of Basic Types and Embeddables• Collections of strings, integers, etc.• Collections of embeddables (e.g., Address, Detail)• Specified by @ElementCollection• Stored in “collection table”• Customize mappings with: – @CollectionTable – @Column (for basic types) – @AttributeOverride, @AssociationOverride (for embeddables) 11
  12. 12. Collections of Basic Types@Entitypublic class Person { @Id protected String ssn; protected String name; protected Date birthDate; ... @ElementCollection protected Set<String> nickNames; ...} 12
  13. 13. Collections of Basic Types PERSON SSN NAME BIRTHDATE PERSON_NICKNAMES PERSON_SSN NICKNAMES 13
  14. 14. Collections of Embeddable Types@Entity public class Landlord { @Id String taxId; String name; @ElementCollection @CollectionTable(name=“rentals”) Set<Address> properties; ...}@Embeddable public class Address { String street; String city; String state; ...} 14
  15. 15. Collections of Embeddable Types LANDLORD TAXID NAME … RENTALS LANDLORD_TAXID STREET CITY STATE … 15
  16. 16. Multiple Levels of Embedding@Entity public class Employee { @Id int empId; String name; ContactInfo contactInfo; . . . }@Embeddable public class ContactInfo { @Embedded Address address; . . . } 16
  17. 17. Embeddables with Relationships@Entity public class Employee { @Id int empId; String name; ContactInfo contactInfo; . . . }@Embeddable public class ContactInfo { @Embedded Address address; @OneToMany Set<Phone> phones; . . . } 17
  18. 18. Persistently Ordered Lists• Order is maintained in database by provider – Uses additional (integral) ordering column• Specified with @OrderColumn• Provides alternative to @OrderBy 18
  19. 19. Persistently Ordered Lists@Entity public class CreditCard { @Id String cardNumber; @ManyToOne Customer customer; ... @OneToMany(mappedBy=“creditCard”) @OrderColumn(name=“TXORDER”) List<CardTransaction> transactionHistory; ...}@Entity public class CardTransaction { @Id @GeneratedValue Long id; @ManyToOne @JoinColumn(name=“CARDID”) CreditCard creditCard; @Temporal(DATE) Date txDate; ...} 19
  20. 20. OrderColumn CREDITCARD CARDNUMBER … CARDTRANSACTION CARDID ID TXDATE … TXORDER 20
  21. 21. @OrderBy Alternative@Entity public class CreditCard { @Id String cardNumber; @ManyToOne Customer customer; ... @OneToMany(mappedBy=“creditCard”) @OrderColumn(name=“TXORDER”) @OrderBy(“txDate”) List<CardTransaction> transactionHistory; ...}@Entity public class CardTransaction { @Id @GeneratedValue Long id; @ManyToOne @JoinColumn(name=“CARDID”) CreditCard creditCard; @Temporal(DATE) Date txDate; ...} 21
  22. 22. Generalized Maps• Map key can be – Basic type – Embeddable – Entity• Map value can be – Basic type – Embeddable – Entity• Support for legacy join tables with additional columns• Support for ternary relationships 22
  23. 23. Generalized Maps• Map collection is specified with – @ElementCollection, @OneToMany, @ManyToMany – Annotation is determined by map value• Customize mapping with: – @CollectionTable (for element collection) – @JoinTable (for relationship) – @MapKeyColumn (for basic map key) – @MapKeyJoinColumn(s) (for entity key) – @AttributeOverride(s) using “key.” or “value.” syntax (for embeddables) 23
  24. 24. Generalized Maps@Entitypublic class VideoStore { @Id Integer storeId; Address location; @ElementCollection @CollectionTable( joinColumn=@JoinColumn(name=“VIDEO_STOREID”)) Map<Movie, Integer> inventory; ...}@Entitypublic class Movie { @Id String title; String director; ...} 24
  25. 25. Generalized Maps VIDEOSTORE STOREID NAME STREET CITY STATE … MOVIE TITLE DIRECTOR … VIDEOSTORE_INVENTORY VIDEO_STOREID INVENTORY_KEY INVENTORY 25
  26. 26. Automatic Orphan Deletion• Deletion of related entities when removed from relationship – For entities logically “owned” by “parent” – For one-to-one and one-to-many relationships• Specified with orphanRemoval element – cascade=REMOVE is redundant 26
  27. 27. Orphan Deletion@Entitypublic class Order { @Id int orderId; ... @OneToMany(cascade=PERSIST, orphanRemoval=true) Set<Item> items;} 27
  28. 28. Java Persistence Query Language:New Functionality• Support for all new modeling and mapping features• Operators and functions in select list• Case, coalesce, nullif expressions• Restricted polymorphism• Collection-valued input parameters• Date / time / timestamp literals 28
  29. 29. New Operators• INDEX – For ordered lists• KEY, VALUE, ENTRY – For maps• CASE, COALESCE, NULLIF – For case expressions and the like• TYPE – For entity type expressions / restricted polymorphism 29
  30. 30. Restricted Polymorphism,Collection-valued Input ParametersSELECT eFROM Employee eWHERE TYPE(e) IN (PartTime, Contractor)SELECT eFROM Employee eWHERE TYPE(e) IN :empTypes 30
  31. 31. Criteria API• Object-based API for building queries• Designed to mirror JPQL semantics• Strongly typed – Based on type-safe metamodel of persistence unit – Heavy use of Java generics – Typing carries through to query execution as well• Supports object-based or strong-based navigation 31
  32. 32. Criteria API: Core Interfaces• CriteriaQuery – Represents a query definition object – Used to add / replace / browse constituent query elements – select, from, where, orderBy, groupBy, having,… methods• CriteriaBuilder – Factory for CriteriaQuery objects – Obtained from EntityManager or EntityManagerFactory – Used to create selections, expressions, restrictions, orderings…• Root – Query root 32
  33. 33. Criteria API: Core Interfaces• Join, ListJoin, MapJoin,… – Joins from a root or existing join• Path – Navigation from a root, join, path• Subquery• Parameter• TypedQuery – Executable query object – Extends Query interface• Tuple – Multiple-valued result type 33
  34. 34. The World’s Simplest Query SELECT c FROM Customer c CriteriaBuilder cb = ...; CriteriaQuery<Customer> cq = cb.createQuery(Customer.class); Root<Customer> c = cq.from(Customer.class); cq.select(c); 34
  35. 35. Joins and Navigation SELECT c FROM Customer c join c.orders o CriteriaBuilder cb = ...; CriteriaQuery<Customer> cq = cb.createQuery(Customer.class); Root<Customer> c = cq.from(Customer.class); Join<Customer, Order> o = customer.join(“orders”); cq.select(c); 35
  36. 36. Joins and Navigation: What’s the Problem? SELECT c FROM Customer c join c.orders o CriteriaBuilder cb = ...; CriteriaQuery<Customer> cq = cb.createQuery(Customer.class); Root<Customer> c = cq.from(Customer.class); Join<Customer, Order> o = customer.join(“wombats”); cq.select(c); 36
  37. 37. Metamodel• Abstract, “schema-level” view of managed classes of persistence unit – Entities, mapped superclasses, embeddables, and their attributes and relationships• Accessible at runtime – EntityManagerFactory.getMetamodel() – EntityManager.getMetamodel()• Useful for frameworks• Provides foundation for type-safe queries• Can be materialized as static metamodel classes – Use javac + annotation processor 37
  38. 38. Type-safe Navigation SELECT c FROM Customer c join c.orders o CriteriaBuilder cb = ...; CriteriaQuery<Customer> cq = cb.createQuery(Customer.class); Root<Customer> c = cq.from(Customer.class); Join<Customer, Order> o = customer.join(Customer_.orders); cq.select(c); 38
  39. 39. Optimistic Locking• Assumes read-committed isolation, deferred writes – Short term read-locks – Long term write-locks• Layered on top of @Version use – Verify version for updated entities before transaction commit• Lock Modes – OPTIMISTIC (READ) – OPTIMISTIC_FORCE_INCREMENT (WRITE)• “READ” lock => verify version for clean data• “WRITE” lock => update version for clean data 39
  40. 40. Pessimistic Locking• Grab database locks upfront• Lock Modes – PESSIMISTIC_READ – PESSIMISTIC_WRITE – PESSIMISTIC_FORCE_INCREMENT• Normal (default) pessimistic locking – Persistent state of entity (except element collections) – Relationships where entity holds foreign key• Extended pessimistic locking – Uses javax.persistence.lock.scope property (EXTENDED) – Element collections and relationships in join tables – Phantoms are possible 40
  41. 41. Pessimistic Locking@Stateless public class HRBean { ... @PersistenceContext EntityManager em; ... public void giveRaises(int deptId) { Department dept = em.find(Department.class, deptId, LockModeType.PESSIMISTIC_READ); if (dept.getBudget() > 100000) { Query q = em.createQuery( “SELECT emp ” + “FROM Employee emp ” + “WHERE emp.dept.id = ” + deptId); q.setLockMode(LockModeType.PESSIMISTIC_WRITE); List = q.getResultList(); // update employee salaries selectively... } }} 41
  42. 42. Locking APIs• EntityManager methods: lock, find, refresh• Query / TypedQuery methods: setLockMode, setHint• NamedQuery annotation: lockMode element• javax.persistence.lock.scope property• javax.persistence.lock.timeout hint• PessimisticLockException (if transaction rolls back)• LockTimeoutException (if only statement rolls back) 42
  43. 43. Second Level Cache APIs• APIs and control options added for portability• Cache interface methods: evict, evictAll, contains• @Cacheable + shared-cache-mode XML element – ALL, NONE, ENABLE_SELECTIVE, DISABLE_SELECTIVE• Properties for find, refresh, setProperty methods – javax.persistence.cache.retrieveMode property • USE, BYPASS – javax.persistence.cache.storeMode property • USE, BYPASS, REFRESH 43
  44. 44. Validation• Leverages work of Bean Validation JSR (JSR 303)• Automatic validation upon lifecycle events – PrePersist – PreUpdate – PreRemove• persistence.xml validation-mode element – AUTO – CALLBACK – NONE 44
  45. 45. Validation@Entity public class Employee { @Id Integer empId; @NotNull String name; Float salary; @Max(15) Integer vacationDays; @Valid Address worksite; ...}@Embeddable public class Address { @Size(max=30) String street; @Size(max=20) String city; @Size(min=2,max=2) String state; @Zipcode String zipcode; ...} 45
  46. 46. Standard Configuration Properties• javax.persistence.jdbc.driver• javax.persistence.jdbc.url• javax.persistence.jdbc.user• javax.persistence.jdbc.password• ... 46
  47. 47. JPA 2.1 Candidate Features http://jcp.org/en/jsr/detail?id=338 NEW Multi-tenancy Support for stored procedures, vendor function Update and Delete Criteria queries, JPQL ↔ Criteria Query by Example Support for schema generation UUID generator type Persistence Context synchronization control Dynamic definition of PU Additional event listeners 47
  48. 48. Summary• Expanded modeling capabilities• Additional O/R mapping options• Additions to Java Persistence query language• Metamodel API• Criteria API• Pessimistic locking• Standardization of many configuration options• Support for validation• Improved portability 48
  49. 49. Resources• Java Persistence 2.0 Specification http://jcp.org/en/jsr/detail?id=317• Reference Implementation is EclipseLink http://www.eclipse.org/eclipselink• Available as part of Java EE 6 with GlassFish http://glassfish.org• Book: Pro JPA 2 (Keith & Schincariol) 49
  50. 50. The following/preceding is intended to outlineour general product direction. It is intended for information purposes only, and may not be incorporated into any contract. It is not a commitment to deliver any material, code, orfunctionality, and should not be relied upon in making purchasing decisions. The development, release, and timing of anyfeatures or functionality described for Oracle’s products remains at the sole discretion of Oracle. 50

×