La Java Persistence API (JPA) es un estándar para mapeo objeto-relacional y persistencia de datos que proporciona un API estándar basado en Plain Old Java Objects (POJOs) con uso extensivo de anotaciones. JPA permite relacionar objetos de dominio con tablas de una base de datos relacional mediante un mecanismo de mapeo declarativo y proporciona servicios de persistencia para almacenar y recuperar objetos desde la base de datos.
11. 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;
...
}
13. 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)
14. 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.
16. 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.
17. 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>
18. 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;
}
23. 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.
26. 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
27. 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
32. 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.