This document summarizes the new features of JPA 2.0 as defined in JSR 317. Key additions include expanded object-relational mappings, improved domain modeling capabilities, enhancements to the Java Persistence query language including a Criteria API, standardization of configuration hints, support for validation via JSR 303, and second level caching.
2. JSR 317: Java Persistence API
• Specification Lead:
Linda DeMichiel, Sun Microsystems, Inc.
• Expert Group:
Adobe Systems Inc., akquinet tech@spree, BEA Systems, Adam Bien,
DataDirect Technologies, Ericsson AB, Antonio Goncalves, IBM, Chris Maki,
Oracle, OW2, Pramati Technologies, RedHat, SAP AG Sun Microsystems
Inc., Sybase, TmaxSoft Inc., VMWare
• Referenzimplemention:
EclipseLink 2.x, www.eclipse.org/eclipselink
1
3. Goals
• Expanded O/R mappings
• Improved domain modeling capabilities
• Additions to the Java Persistence query language
• An API for criteria queries
• Standardization of configuration hints
• Additional contracts for detached entities and extended persistence
contexts
• Support for validation via integration with the work of JSR 303
2
10. Combined Primary Keys
@Entity
@IdClass(ArticlePK.class)
public class Article {
@Id Long id;
@Id @ManyToOne Magazine magazine;
@Id @ManyToOne Author author;
}
public class ArticlePK {
Long id;
Long magazine;
Long author;
}
markus@eisele.net 9
11. Criteria API I
// create / inject EntityManager
EntityManager em = ...;
// build Criteria Query
CriteriaBuilder qb = em.getCriteriaBuilder();
CriteriaQuery cq = qb.createQuery();
Root<Author> autor = cq.from(Author.class);
cq.select(author);
// execute Criteria Query
Query query = em.createQuery(cq);
List result = query.getResultList();
markus@eisele.net 10
12. Criteria API II
Root autor = cq.from(Author.class);
cq.where(qb.equal(author.get("name"), name));
cq.select(autor);
markus@eisele.net 11
13. Metamodel API
@Entity public class Customer {
@Id int custId;
String name;
...
@OneToMany(mappedBy="customer") Set<Order> orders;
...
}
import javax.persistence.metamodel.*;
@TypesafeMetamodel
public class Customer_ {
public static volatile Attribute<Customer, Integer> custId;
public static volatile Attribute<Customer, String> name;
public static volatile Set<Customer, Order> orders;
...
}
12
14. Metamodel API + Criteria API
cq.where(qb.equal(autor.get(Autor_.name), "name"));
markus@eisele.net 13