Upload
aaron-schram
View
1.439
Download
1
Tags:
Embed Size (px)
DESCRIPTION
University of Colorado PhD software engineering student Aaron Schram explains the details of persisting objects using the Java Persistence API.
Citation preview
Mapping Objects With JPAJava Persistence API 2.0
Aaron Schram
University of Colorado at Boulder
Thursday, March 31, 2011
Me
PhD Candidate at the University of Colorado
Prior to returning to CU I held several software engineering positions
Mocapay, Inc. (Mobile Payments)
Rally Software Development (Agile Tooling)
BEA Systems (Weblogic Portal, Now Oracle)
Lockheed Martin (IS & GS)
Thursday, March 31, 2011
Some History
Thursday, March 31, 2011
History
A result of the JSR 317 Expert Group
Members included
Sun Microsystems, Inc.
Oracle
BEA Systems*
IBM
VMWare
Thursday, March 31, 2011
History Cont...
Developed as a replacement for EJB 2 entity beans
Version 2.0 was released Dec 10th, 2009
Covers 2 areas of Object Relational Mapping (ORM)
Object relational metadata
Java Persistence Query Language (JPQL)
Thursday, March 31, 2011
History Cont...
JPA 2.0 included consensus approval for new features
Expanded ORM functionality
Criteria query API
Standardization of query hints
Standardization of metadata for DDL generation
Validation support
Thursday, March 31, 2011
It’s Just A Specification*JPA is a specification used to detail what a reference provider should conform to when providing ORM functionality
It’s actually more than just a specification
A finalized Java Specification Request will include a reference implementation
Since JPA is a finalized JSR an implementation is provided
There are many JPA reference implementations
Hibernate, EclipseLink, OpenJPAThursday, March 31, 2011
Hibernate
The most popular JPA vendor is Hibernate (JBoss)
JPA 1.0 was heavily influenced by Gavin King, the creator of Hibernate
Much of what exists in JPA is adopted directly from the Hibernate project
Many key concepts such as mapping syntax and central session/entity management exist in both
Thursday, March 31, 2011
Key ConceptsJPA utilizes annotated Plain Old Java Objects (POJOs)
Define an EntityBean for persistence
@Entity
Define relationships between beans
@OneToOne
@OneToMany
@ManyToOne
@ManyToMany
Thursday, March 31, 2011
Key Concepts Cont...Primitive types and wrappers are mapped by default
String, Long, Integers, Double, etc.
Mappings can be defined on instance vars or on accessor methods of the POJO
Supports inheritance and embedding
EntityManger is used to manage the state and life cycle of all entities within a give persistence context
Primary keys are generated and accessed via @Id annotation
Thursday, March 31, 2011
An Example
Thursday, March 31, 2011
Office-Employees Example
This was a common interview question at one of my previous employers
Thursday, March 31, 2011
Question:How could you model an employee management system using an ORM?
Thursday, March 31, 2011
Question DetailsDesign an application that allows a customer to view all employees that physically reside in a specific office
Each employee may only reside in one office
Employees must have
First name, last name, phone number, id
Each office must have
Name, postal address, id
Any ORM will do, we’ll use JPA...
In the interview we would build the
whole application
Here, we’ll just build out the model tier
Thursday, March 31, 2011
The Model
Thursday, March 31, 2011
Thursday, March 31, 2011
From Model to Code
Our model contains four classes
Office
Employee
DomainObject
PostalAddress
Office and Employee inherit from DomainObject
DomainObject holds on to best practice attributes such as id, creation date, modified date, version, etc.
Thursday, March 31, 2011
From Model to Code Cont...
@Entity must be used to tell JPA which classes are eligible for persistence
@ManyToOne must be used to tell JPA there is an aggregation between Office and Employee
We’ll show a use of @Embedded and @Embeddable for the Office-PostalAddress relationship
As well as inheritance using @MappedSuperclass
Thursday, March 31, 2011
DomainObject
Thursday, March 31, 2011
This class is not to be directly persisted
DB generated Id
For optimistic locking
Store as datetime
Call these methods before creation and
modification
Thursday, March 31, 2011
Office
Thursday, March 31, 2011
Eligible for persistence
Embed PostalAddress in the same table as Office
Thursday, March 31, 2011
PostalAddress
Thursday, March 31, 2011
Allow this object to be embedded by
other objects
State is an Enum that will be treated
as a String (varchar)
Thursday, March 31, 2011
Employee
Thursday, March 31, 2011
Defines the many to one association with
Office
Eligible for persistence
Thursday, March 31, 2011
Explanation@Embeddable and @Embedded
Allows for the attributes of an embedded class to be stored in the same table as the embedding class
@Enumerated
Allows for the value of an Enum to be stored in a column in the class’s database table
@MappedSuperclass
Allows for all attributes of the superclass to be utilized by the subclasses
Duplicates all superclass attributes on subclass tables
Thursday, March 31, 2011
The Database
Thursday, March 31, 2011
The DatabaseJPA is capable of generating the underlying database for the developer
Most aspects of the generation are available for customization
The defaults are generally good enough
Any @Entity causes the generation of a database table. Our generated tables are:
Office table
Employee table
Thursday, March 31, 2011
Office TableField Type
id bigint(20)createDate datetime
modifiedDate datetimeversion int(11)name varchar(255)
addressOne varchar(255)addressTwo varchar(255)
city varchar(255)state varchar(255)
zipCode varchar(255)
Thursday, March 31, 2011
Employee TableField Type
id bigint(20)
createDate datetime
modifiedDate datetime
version int(11)
firstName varchar(255)
lastName varchar(255)
location varchar(255)
phoneNumber varchar(255)
office_id bigint(20)
FK to Office
Thursday, March 31, 2011
Take Aways
Thursday, March 31, 2011
Take Aways
JPA is a specification that a developer can code to in order to easily leverage ORM technologies
There are a wide variety of vendors that implement the specification
Coding to the spec allows the developer to be flexible in their choice of vendor implementations with limited ripple throughout the codebase
JPA greatly simplifies persistence of POJOs through a small set of easily utilized annotations
Thursday, March 31, 2011
Questions?Aaron [email protected]
Thursday, March 31, 2011