SlideShare una empresa de Scribd logo
1 de 36
Descargar para leer sin conexión
Java	Persistence	API	(JPA)
Diego	Armando	Gómez	Mosquera.
dgomez@vortexbird.com
2017
Java	Persistence	API	(JPA)	
• Estándar	para	mapeo	objeto	relacional	y	persistencia	
de	datos.
• Provee	un	API	estándar.
• Se	basa	en	Plain	Old	Java	Object	(POJO).
• Uso	extensivo	de	anotaciones.
• JSR	220:	JavaTM Persistence 1.0
• JSR	317:	JavaTM Persistence 2.0
• JSR	338:	JavaTM Persistence 2.1
Java	Persistence	API	(JPA)
• POJO
– Clase	que	no	debe	implementar	una	interfaz	o	
heredar	de	una	clase	mas	especializada.
class MyServlet extends HttpServlet {}
class MyRemote implements SessionBean {}
No	son	POJO
Anotaciones	JPA
• @Entity
• @Id
• @Embeddable
• @OneToOne
• @OneToMany
• @ManyToOne
• @ManyToMany
Mapeador	Objeto	Relacional
Capa de persistencia
Modelo de Objetos
SQL
Base de Datos Relacional (RDB)Mapeador Objeto Relacional (ORM)
HQL
JPQL
OQL
SQL Nativo
Relación unidireccional
Relación unidireccional
@Entity
public class User {
@Id
private String userId;
private String email;
@OneToOne
private BillingInfo billingInfo;
}
@Entity
public class BillingInfo {
@Id
private Long billingId;
private String creditCardType;
private String creditCardNumber;
private String nameOnCreditCard;
private Date creditCardExpiration;
private String bankAccountNumber;
private String bankName;
private String routingNumber;
}
Relación bidirecional
Relación bidirecional
@Entity
public class Usuario{
@Id
private String userId;
private String email;
@OneToOne
private Facturacion factura;
}
@Entity
public class Facturacion{
@Id
private Long facturacionId;
private String tipoTarjetaDeCredito;
private String numeroTarjetaDeCredito;
private String nombreDeTarjetaDeCredito;
private Date fechaDeVencimientoTarjeta;
private String numeroDeCuentaDeBanco;
private String nombreBanco;
@OneToOne (mappedBy=“Facturacion”)
private Usuario usuario;
}
Relación uno a muchos
Relación uno a muchos
@Entity
public class Item {
@Id
protected Long itemId;
protected String nombre;
protected String descripcion;
protected Date fecha;
...
@OneToMany(mappedBy="item")
protected Set<Oferta> ofertas;
...
}
@Entity
public class Oferta{
@Id
protected Long ofertaId;
protected Double valor;
protected Date fecha;
...
@ManyToOne
protected Item item;
...
}
EntityManager
Object EntityManager Base	de	datos
Grabar SQL
Obtener Resultado
EntityManager
• El administrador de entidades permite relacionar
la diferentes operaciones asociadas al motor de
base de datos.
– Crear
– Modificar
– Borrar
– Buscar por diferentes criterios.
– Cache
– Proxy
– Carga tardia (Lazy load)
EntityManager
Metodo Desccripcion
public	void	persist(Object	entity); Saves	(persists)	an	Entity	into	the	database.
public	void	remove(Object	entity); Removes	an	Entity	from	the	database.
public	<T>	T	find(Class<T>	
entityClass,	Object	primaryKey); Find	an	entity	instance	by	its	primary	key.
public	void	flush();	
Synchronize	the	state	of	Entities	in	the	EntityManager’s	persistence	
context	with	database.
public	void	
setFlushMode(FlushModeType	
flushMode);	
Change	the	flush	mode	of	the	EntityManager’s	persistent	context.	The	
flush	mode	may	either	be	AUTO	or	COMMIT.
public	FlushModeType	
getFlushMode(); Retrieve	the	current	flush	mode.
public	void	refresh(Object	entity);	 Refresh	(reset)	the	Entity	from	the	database.
public	Query	createQuery(String	
jpqlString); Create	a	dynamic	query	using	a	JPQL	statement.
public	Query	
createNamedQuery(String	name);
Create	a	query	instance	based	on	a	named	query	on	the	Entity	
instance.
EntityManager
Metodo Descripcion
public	Query	createNativeQuery(String	sqlString);
public	Query	createNativeQuery(String	sqlString,	Classresult	Class);
public	Query	createNativeQuery(String	sqlString,	String	
resultSetMapping); Create	a	dynamic	query	using	a	native	SQL	statement.
public	void	close();	 Close	an	EntityManager.
public	boolean	isOpen();	 Check	whether	an	EntityManager	is	open.
public	EntityTransaction	getTransaction();
Retrieve	a	transaction	object	that	can	be	used	to	manually
start	or	end	a	transaction..
public	void	joinTransaction();	 Ask	an	EntityManager to	join	an	existing	JTA	transaction.
Persistence Units
• Define un conjunto de entidades que son
manejadas por un EntityManager.
• Las unidades de persistencia son
definidas en un documento XML llamado
persistence.xml
• El persistence.xml se encuentra en la
carpeta META-INF.
Persistence.xml
<persistence>
<persistence-unit name="OrderManagement">
<description>This unit manages orders and customers.
It does not rely on any vendor-specific features and can
therefore be deployed to any persistence provider.
</description>
<jta-data-source>jdbc/MyOrderDB</jta-data-source>
<jar-file>MyOrderApp.jar</jarfile>
<class>com.widgets.Order</class>
<class>com.widgets.Customer</class>
</persistence-unit>
</persistence>
Usando un EntityManager
public class ItemManagerBean implements ItemManager {
@PersistenceContext(unitName="actionBazaar")
private EntityManager entityManager;
public Item addItem(String title, String description,byte[] picture, double
initialPrice, long sellerId) {
Item item = new Item();
item.setTitle(title);
item.setDescription(description);
item.setPicture(picture);
item.setInitialPrice(initialPrice);
Seller seller = entityManager.find(Seller.class, sellerId);
item.setSeller(seller);
entityManager.persist(item);
return item;
}
Laboratorio
Laboratorio
• Instalar	HibernateTool
– http://tools.jboss.org/downloads/jbosstools/neon
/4.4.3.Final.html
• Creación	de	proyecto	habilitado	para	usar	JPA	
con	Hibernate ORM.
• Ingeniería	inversa.
• Activación	de	logs de	SQL
• Escenario	CRUD
Estructura	Proyecto	Java	Maven
Java	Persistence Query
Language (JPQL)
Java	Persistence Query Language
(JPQL)	
• Lenguaje	de	consulta	orientado	a	objetos
• Independiente	del	motor	de	base	de	datos.
• Basado	en	dialectos
• Similar	a	SQL	y	mas	parecido	a	OQL.
Sentencia	SELECT
• JPQL	es	sensible	a	las	mayúsculas	y	minúsculas	
para	las	entidades	u	objetos	Java.
• Las	palabras	reservadas	no	son	sensibles	a	las	
mayúsculas	y	minúsculas.
• Ejemplo	de	Select basico:
SELECT c FROM Clientes c
SELECT c.propiedad.subPropiedad.subSubPropiedad FROM Clase c
Sentencia	SELECT
• JPQL	es	sensible	a	las	mayúsculas	y	minúsculas	
para	las	entidades	u	objetos	Java.
• Las	palabras	reservadas	no	son	sensibles	a	las	
mayúsculas	y	minúsculas.
• Ejemplo	de	Select basico:
SELECT c FROM Clientes c
SELECT c.propiedad.subPropiedad.subSubPropiedad FROM Clase c
select cli from Clientes as cli where cli.tiposDocumentos.tdocCodigo=:codigoTipoDocumento
Sentencia	SELECT
• from Cat as	cat
• from Cat as	cat inner join cat.mate as	mate	left outer
join cat.kittens as	kitten
• from Cat as	cat where cat.mate.name like '%s%’
• select avg(cat.weight),	sum(cat.weight),	
max(cat.weight),	count(cat)	from Cat cat
• select foo from Foo foo,	Bar	bar	where foo.startDate
=	bar.date
Sentencia	 JOIN
SELECT c FROM Clientes c
SELECT c.propiedad.subPropiedad.subSubPropiedad FROM Clase c
select cli from Clientes as cli where cli.tiposDocumentos.tdocCodigo=:codigoTipoDocumento
Funciones	aritmeticas
• Similares	a	las	de	SQL
SELECT COUNT(e) FROM Empleado e
SELECT AVG(cue.cueSaldo), SUM(cue.cueSaldo), cue FROM Cuentas as cue
SELECT cue FROM Cuentas cue WHERE MOD(cue.cueSaldo,2)=0
Sentencia	UPDATE
• JPQL	puede	realizar	operaciones	de	
actualización	en	la	base	de	datos	mediante	la	
sentencia	UPDATE:
UPDATE Cuentas c SET c. cueSaldo = 1000 WHERE c.clientes.cliId = ‘101234’
Sentencia	DELETE
• JPQL	puede	realizar	operaciones	de	
actualización	en	la	base	de	datos	mediante	la	
sentencia	DELETE:
DELETE FROM Movimiento m WHERE m. decMoviimporte < 5000
JPQL	y	Query
• JPQL	es	integrado	a	través	de	
implementaciones	de	la	interface	Query.
• La	implementación	de	Query se	obtiene	
mediante	el	EntityManager.	
• Los	tres	mas	usados	son:
– createQuery(String jpql)
– createNamedQuery(String name)
– createNativeQuery(String sql)
Resumen
• Hibernate el	mapeador con	mas	
características	del	mercado.
• Es	software	libre
• Jboss ahora	Red	Hat
• JPA	es	una	especificación	de	referencia
• Implementación	de	patrones	de	diseño	
sofisticados	para	mejorar	rendimiento	de	
acceso	a	datos.
Bibliografía
• EJB	3.0	In	Action
• EJB	3.1	In	Action
• Mastering	Enterprise	JavaBeans	3.0
• Java	persistence	with	hibernate
• Beginning	Java™	EE	7	Platform	with	
GlassFish™	4:	From	Novice	to	Professional
Enlaces
• http://www.eclipse.org/eclipselink/
• http://www.hibernate.org/
• http://www.oracle.com/technetwork/articles/javaee/jp
a-137156.html
• http://www.javabeat.net/javabeat/ejb3/articles/2007/
04/introduction_to_java_persistence_api_jpa_ejb_3
_0_1
• http://www.oracle.com/technetwork/middleware/topli
nk/overview/index.html
Información	de	contacto
• Sitio	Web:	www.vortexbird.com
• Blog:	http://blog.vortexbird.com
• Contacto	vía	mail:	dgomez@vortexbird.com
• Direccion:	Calle	18	#	118-241	Oficina	21
• Teléfonos:	+57		- (316	482	4629)
Introduccion a JPA

Más contenido relacionado

Similar a Introduccion a JPA (20)

INSTALACION DE SERVIDORES - JPA
INSTALACION DE SERVIDORES - JPAINSTALACION DE SERVIDORES - JPA
INSTALACION DE SERVIDORES - JPA
 
Introducción a Java Persistence API
Introducción a Java Persistence APIIntroducción a Java Persistence API
Introducción a Java Persistence API
 
feedback
feedbackfeedback
feedback
 
MyBatis como alternativa a Hibernate
MyBatis como alternativa a HibernateMyBatis como alternativa a Hibernate
MyBatis como alternativa a Hibernate
 
Master j2ee
Master j2eeMaster j2ee
Master j2ee
 
Java Web - JSP
Java Web - JSPJava Web - JSP
Java Web - JSP
 
Lab 03 20111429
Lab 03 20111429Lab 03 20111429
Lab 03 20111429
 
Persistence
PersistencePersistence
Persistence
 
S4-PD1.pptx
S4-PD1.pptxS4-PD1.pptx
S4-PD1.pptx
 
Java Persistence Api (Jpa)
Java Persistence Api (Jpa)Java Persistence Api (Jpa)
Java Persistence Api (Jpa)
 
P2C2 Introducción a JEE5
P2C2 Introducción a JEE5P2C2 Introducción a JEE5
P2C2 Introducción a JEE5
 
Lo nuevo de Java EE6
Lo nuevo de Java EE6Lo nuevo de Java EE6
Lo nuevo de Java EE6
 
Hands-on Spring 3: The next generation
Hands-on Spring 3: The next generationHands-on Spring 3: The next generation
Hands-on Spring 3: The next generation
 
Jpa vs hibernate
Jpa vs hibernateJpa vs hibernate
Jpa vs hibernate
 
T3 - JPA
T3 - JPAT3 - JPA
T3 - JPA
 
01 introducción
01 introducción01 introducción
01 introducción
 
Desarrollo de aplicaciones empresariales con Java EE
Desarrollo de aplicaciones empresariales con Java EEDesarrollo de aplicaciones empresariales con Java EE
Desarrollo de aplicaciones empresariales con Java EE
 
05 jsp tags
05 jsp tags05 jsp tags
05 jsp tags
 
Spring community day 2010
Spring community day 2010Spring community day 2010
Spring community day 2010
 
Objetos implícitos
Objetos implícitosObjetos implícitos
Objetos implícitos
 

Más de Vortexbird

Spring security 2017
Spring security 2017Spring security 2017
Spring security 2017Vortexbird
 
Spring ORM JPA
Spring ORM JPASpring ORM JPA
Spring ORM JPAVortexbird
 
Spring framework core 2017
Spring framework core 2017Spring framework core 2017
Spring framework core 2017Vortexbird
 
Bean validation 2017
Bean validation 2017Bean validation 2017
Bean validation 2017Vortexbird
 
Log en Aplicaciones Java y JavaEE
Log en Aplicaciones Java y JavaEELog en Aplicaciones Java y JavaEE
Log en Aplicaciones Java y JavaEEVortexbird
 
Servicios Rest con Jersey
Servicios Rest con Jersey Servicios Rest con Jersey
Servicios Rest con Jersey Vortexbird
 
Servicios Web Rest con Spring MVC
Servicios Web Rest con Spring MVCServicios Web Rest con Spring MVC
Servicios Web Rest con Spring MVCVortexbird
 
Vb.pd.zathuracode.v5.0.1
Vb.pd.zathuracode.v5.0.1Vb.pd.zathuracode.v5.0.1
Vb.pd.zathuracode.v5.0.1Vortexbird
 
Zathuracode Version 5.0.0
Zathuracode Version 5.0.0Zathuracode Version 5.0.0
Zathuracode Version 5.0.0Vortexbird
 
Web services SOAP con JAX-WS
Web services SOAP con JAX-WSWeb services SOAP con JAX-WS
Web services SOAP con JAX-WSVortexbird
 
Web services restful con JAX-RS
Web services restful con JAX-RSWeb services restful con JAX-RS
Web services restful con JAX-RSVortexbird
 
Orm hibernate springframework
Orm hibernate springframeworkOrm hibernate springframework
Orm hibernate springframeworkVortexbird
 
Introducccion springframework
Introducccion springframeworkIntroducccion springframework
Introducccion springframeworkVortexbird
 

Más de Vortexbird (15)

Spring security 2017
Spring security 2017Spring security 2017
Spring security 2017
 
Spring ORM JPA
Spring ORM JPASpring ORM JPA
Spring ORM JPA
 
Spring framework core 2017
Spring framework core 2017Spring framework core 2017
Spring framework core 2017
 
Bean validation 2017
Bean validation 2017Bean validation 2017
Bean validation 2017
 
Log en Aplicaciones Java y JavaEE
Log en Aplicaciones Java y JavaEELog en Aplicaciones Java y JavaEE
Log en Aplicaciones Java y JavaEE
 
Servicios Rest con Jersey
Servicios Rest con Jersey Servicios Rest con Jersey
Servicios Rest con Jersey
 
Servicios Web Rest con Spring MVC
Servicios Web Rest con Spring MVCServicios Web Rest con Spring MVC
Servicios Web Rest con Spring MVC
 
Primefaces
PrimefacesPrimefaces
Primefaces
 
Facelets
FaceletsFacelets
Facelets
 
Vb.pd.zathuracode.v5.0.1
Vb.pd.zathuracode.v5.0.1Vb.pd.zathuracode.v5.0.1
Vb.pd.zathuracode.v5.0.1
 
Zathuracode Version 5.0.0
Zathuracode Version 5.0.0Zathuracode Version 5.0.0
Zathuracode Version 5.0.0
 
Web services SOAP con JAX-WS
Web services SOAP con JAX-WSWeb services SOAP con JAX-WS
Web services SOAP con JAX-WS
 
Web services restful con JAX-RS
Web services restful con JAX-RSWeb services restful con JAX-RS
Web services restful con JAX-RS
 
Orm hibernate springframework
Orm hibernate springframeworkOrm hibernate springframework
Orm hibernate springframework
 
Introducccion springframework
Introducccion springframeworkIntroducccion springframework
Introducccion springframework
 

Introduccion a JPA