0% found this document useful (0 votes)
20 views

Introduction To Java Persistence API

JPA

Uploaded by

tuln.dev
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
20 views

Introduction To Java Persistence API

JPA

Uploaded by

tuln.dev
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 28

Introduction to Java Persistence API

1
Java Persistence API

• Part of JSR-220 (Enterprise JavaBeans ™ 3.0)


• Began as simplification of entity beans
 Evolved into POJO persistence technology
• JPA was defined as part of EJB3.0 as a replacement to EJB 2 CMP
Entity beans.
• It is now considered the standard industry approach for ORM
• Scope expanded a request of community to support general use in
Java ™ EE and Java SE environments
• Reference implementaion under Project GlassFish
 Oracle TopLink Essentials

2
Primary Features

• POJO-based persistence model


 Simple Java classes —no components
• Support for enriched domain modeling
 Inheritance, polymorphism,etc.
• Expanded query language
• Standardized object /relational mapping
 Using Annotations and/or XML
• Usable in Java EE and Java SE environments
• Support for pluggable persistence providers

3
Entities

• Plain old Java objects


 Created by means of new
 No required interfaces
 Have persistent identity
 May have both persistent and non-persistent state
• Simple types (e.g., primitives, wrappers, enums)
• Composite dependent object types (e.g., Address)
• Non-persistent state (transient or @Transient )
 Can extend other entity and non-entity classes
 Serializable; usable as de ached object s in other tiers
• No need for data transfer objects

4
Example
@Entity public class Customer implements Serializable {
@Id protected Long id;
protected String name;
@Embedded
protected Address address;
protected PreferredStatus status;
@Transient
protected int orderCount;
public Customer(){}
public Long getId(){return id;} protected void setId(Long id){this.id =id;}
public String getName(){return name;}
public void setName(String name){
this.name =name;
}

}

5
Entity Identity

• Every entity has a persistence identity


 Maps to primary key in database
• Can correspond to simple type
 Annotations
• @Id —single field/proper y in en i y class
• @GeneratedValue —value can be genera ed automatically
using various strategies (SEQUENCE,TABLE,IDENTITY,AUTO)
• Can correspond o user-defined class
 Annotations
• @EmbeddedId —single field/property in entity class
• @IdClass —corresponds to multiple Id fields in entity class
• Must be defined on root of entity hierarchy or mapped superclass

6
Persistence context

• Represent a set of managed entity instances a run time


• Entity instances all belong to same persistence unit ;all mapped to
same database
• Persistence unit is a unit of packaging and deployment
• EntityManager API is used to manage persistence context ,control
lifecycle of entities, find entities by id, create queries

7
Types of Entity Managers

• Container-managed
 A typical JTA transaction involves calls across multiple components,
which in turn, may access he same persistence context
 Hence, the persistence context has to be propagated with he JTA
transaction to avoid the need for the application to pass references to
EntityManager instances from one component to another
• Application-managed
 Application manages the life time of he EnityManager

8
Two types of container-managed entity manager

• Transaction scope entity manager


 Transaction scoped persistence context begins when entity
manager is invoked within the scope of a Transaction, and ends
when he transaction is committed or rolled-back
 If en i y manager is invoked out side a transaction, any entities
loaded from he da abase immediately become de ached a the
end of he method call

• Extended scope entity manager


 The persistence context exists from the time the entity manager
instance is created until it is closed
 Extended scope persistence context could span multiple
transactional and non-transactional invocations of he entity
manager
 Extended scope persistence context maintains references to
entities after the Transaction has commited i.e. Entities remain
managed

9
Entity Lifecycle

• new
 New entity instance is created
 Entity is not yet managed or persistent
• persist
 Entity becomes managed
 Entity becomes persistent in database on Transaction commit
• remove
 Entity is removed
 Entity is dele ed from database on transaction commit
• refresh
 Entity ’s state is reloaded from database
• merge
 State of detached entity is merged back in o managed entity

10
Entity Relationships

• One-to-one, one-to-many, many-to-many, many-to-one


relationships among entities
 Support for Collection, Set ,List ,Map types
• May be unidirectional or bidirectional
 Bidirectional relationships are managed by application, not
Container
 Bidirectional relationships have owning side and inverse side
 Unidirectional relationships only have an owning side
 Owning side determines he updates to the relationship in the
database
• When to delete related data?

11
Example
@Entity public class Customer {
@Id protected Long id;

@OneToMany protected Set<Order>orders =new HashSet();
@ManyToOne protected SalesRep rep;

public Set<Order>getOrders(){return orders;}
public SalesRep getSalesRep(){return rep;}
public void setSalesRep(SalesRep rep){this.rep =rep;}
}//
@Entity public class SalesRep {
@Id protected Long id;
…@OneToMany(mappedBy=“rep ”)
protected Set<Customer>customers =new HashSet();

public Set<Customer>getCustomers(){return customers;}
public void addCustomer(Customer customer){ getCustomers().add(customer);
customer.setSalesRep(this);
}}

12
Inheritance

• Entities can extend


 Other entities
• Either concrete or abstract
 Mapped superclasses
• Supply common entity state
 Ordinary (non-entity) Java classes
• Supply behavior and/or non-persistent state

13
Example

MappedSuperclass
@MappedSuperclass public class Person {
@Id protected Long id;
protected String name;
@Embedded protected Address address;
}
@Entity public class Customer extends Person {
@Transient protected int orderCount;
@OneToMany protected Set<Order>orders =new HashSet();
}
@Entity public class Employee extends Person {
@ManyToOne protected Department dept;
}
A mapped superclass cannot be a target of queries, and cannot be passed
to methods on EntityManager interface. It cannot be target of persistent
relationships.

14
Example

Abstract Entity
@Entity public abstract class Person {
@Id protected Long id;
protected String name;
@Embedded protected Address address;
}
@Entity public class Customer extends Person { @Transient protected
int orderCount;
@OneToMany protected Set<Order>orders =new HashSet();
}
@Entity public class Employee extends Person {
@ManyToOne protected Department dept;
}
An abstract entity can be a target of queries, and can be passed to
methods on EntityManager interface. It cannot be instantiated.

15
Persist

@Stateless public class OrderManagementBean implements


OrderManagement {

@PersistenceContext EntityManager em;

public Order addNewOrder(Customer customer, Product product){
Order order =new Order(product);
customer.addOrder(order);
em.persist(order);
return order;
}}
Should be able to get rid of this When we add an order to customer, an
order should automatically be inserted in the underlying orders
table.

16
Cascading Persist
@Entity public class Customer {
@Id protected Long id; …
@OneToMany(cascade=PERSIST)
protected Set<Order>orders =new HashSet();
}

public Order addNewOrder(Customer customer, Product product){
Order order =new Order(product); customer.addOrder(order);
return order; }
Add Order into the underlying tab e at the time of adding Order to the
Customer entity's state.

17
Remove

@Entity public class Order {


@Id protected Long orderId;

@OneToMany(cascade={PERSIST,REMOVE}) protected
Set<LineItem>ineItems =new HashSet();
}

@PersistenceContext EntityManager em; …
public void de eteOrder(Long orderId){ Order order =em.find(Order.c
ass,orderId); em.remove(order);
}

Remove a the associated LineItem entities when we remove Order


entity.

18
Merge

@Entity public class Order {


@Id protected Long orderId; …
@OneToMany(cascade={PERSIST,REMOVE,MERGE})
protected Set<LineItem>ineItems =new HashSet();
}

@PersistenceContext EntityManager em;

public Order updateOrder(Order changedOrder){
return em.merge(changedOrder);
}
Propagate changes (if any)to LineItem entity upon merging the
Order entity.

19
Queries

20
Java Persistence Query Language

• An extension of EJB ™ QL
 Like EJB QL, a SQL-like language
• Added functionality
 Projection list (SELECT clause)
 Explicit JOINS
 Subqueries
 GROUP BY,HAVING
 EXISTS,ALL,SOME/ANY
 UPDATE,DELETE opera ions
 Additional functions

21
Projection

SELECT e.name, d.name FROM Employee e JOIN


e.department d WHERE e.status =‘FULLTIME ’

SELECT new com.example.EmployeeInfo(e.id, e.name,e.salary,


e.status,d.name) FROM Employee e JOIN e.department d
WHERE e.address.state =‘CA ’

22
Subqueries

SELECT DISTINCT emp FROM Employee emp WHERE EXISTS


( SELECT mgr FROM Manager mgr WHERE emp.manager =mgr
AND emp.salary >mgr.salary)

23
Joins

• SELECT DISTINCT o FROM Order o JOIN o.lineItems


JOIN .product p WHERE p.productType =‘shoes ’
• SELECT DISTINCT c FROM Customer c LEFT JOIN FETCH
c.orders WHERE c.address.city =‘San Francisco ’

24
Update,Delete

• UPDATE Employee e SET e.salary =e.salary *1.1 WHERE


e.department.name =‘Engineering ’
• DELETE FROM Customer c WHERE c.status =‘inactive ’AND
c.orders IS EMPTY AND c.balance =0

25
Queries

• Static queries
 Defined with Java language metada a or XML
• Annotations: @NamedQuery, @NamedNativeQuery
• Dynamic queries
 Query string is specified a run time
• Use Java Persistence query language or SQL
• Named or positional parameters
• EntityManager is factory for Query objects
 createNamedQuery,createQuery,createNativeQuery
• Query methods for con rolling max results, pagination,flush mode

26
Dynamic Queries

@PersistenceContext EntityManager em;



public List findByZipcode(String personType, int
zip){
return em.createQuery ( “SELECT p FROM ”
+personType +“ p WHERE p.address.zip =:zip ”)
.setParameter(“zipcode
”,zip) .setMaxResults(20));
}

27
Static Query

@NamedQuery(name=“customerFindByZipcode ”, query = “SELECT c


FROM Customer c WHERE c.address.zipcode =:zip ”)
@Entity public class Customer {…}

public List findCustomerByZipcode(int zipcode){
return em.createNamedQuery (“customerFindByZipcode
”) .setParameter(“zip ”,zipcode).setMaxResu ts(20).getResutList();
}

28

You might also like