java persistance api
Post on 12-Jan-2016
39 Views
Preview:
DESCRIPTION
TRANSCRIPT
Java Persistance Java Persistance APIAPI
JPAJPA
¿Qué es una ¿Qué es una Entidad?Entidad?
¿Qué es una entidad?¿Qué es una entidad?
Plain Old Java Object(POJO) Se crean por medio de la palabra reservada new
No se requieren interfaces Tiene una identidad de persistencia Puede tener estados tanto persistentes como no
persistentes Tipos Simples (ej. primitivos, enums ..) Estados no persistentes (transient o @Transient)
Permite herencia entre entidades Serializable; usable como objetos separados
en otras capas No necesitan objetos de transferencia de datos
Ejemplo de EntidadEjemplo de Entidad
@Entitypublic 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;}…
}
Llave primaria (Pk - Id) de la EntidadLlave primaria (Pk - Id) de la Entidad
Cada Entidad tiene una llave primaria (identity) de persistencia.
Puede corresponder a un tipo simple @EmbeddedId – campo simple/propiedad en la
clase entidad @IdClass – corresponde a muchos campos Id en la
clase entidad Debe ser definido en la raíz de la jerarquía d eal
entidad o clase padre mapeada
Modelo de Modelo de ProgramaciónProgramación
Modelo de Programación de Persistencia de JavaModelo de Programación de Persistencia de Java
La entidad es un POJO (no necesita implementar un EntityBean)
Uso de Annotations para denotar un POJO como una entidad (en lugar de un descriptor)
// @Entity is an annotation// It annotates Employee POJO class to be Entity@Entitypublic class Employee {// Persistent/transient fields// Property accessor methods// Persistence logic methods}
Ejemplo de Entidad de Persistencia (1)Ejemplo de Entidad de Persistencia (1)
@Entitypublic class Customer {
private Long id;private String name;private Address address;private Collection<Order> orders = new HashSet();public Customer() {}
@Id public Long getID() {return id;
}
protected void setID (Long id) {this.id = id;
}...
Annotation denota que es Entidad
@Id denota la llave primaria
Métodos accesores para acceder el estado
Ejemplo de Entidad de Persistencia (2)Ejemplo de Entidad de Persistencia (2)
...
// Relationship between Customer and Orders@OneToManypublic Collection<Order> getOrders() {
return orders;}public void setOrders(Collection<Order> orders)
{this.orders = orders;
}// Other business methods...
}
Código de Cliente: De Código de Cliente: De Java SE ClientJava SE Client
public static void main(String[] args) {EntityManagerFactory emf =Persistence.createEntityManagerFactory("EmployeeSe
rvice);EntityManager em = emf.createEntityManager();Collection emps = em.createQuery("SELECT e FROM
Employee e").getResultList();// More codes
Contexto de Contexto de Persistencia y Persistencia y
Manejador de EntidadManejador de Entidad
Persistance Context & Persistance Context & Entity Manager (EM)Entity Manager (EM)
Contexto de Persistencia y Manejador de EntidadContexto de Persistencia y Manejador de Entidad
Contexto de Persistencia Representa un conjunto de instancias de entidad
administradas por la capa de persistencia en tiempo de ejecución
“Una instancia de Entidad es un estado administrado” significa que la instancia está contenida en un contexto de persistencia
Inclusión o exclusión de una entidad en/de el contexto de persistencia determina la salida de cualquier operación de persistencia en él
No es directamente accesible para la aplicación es accedido indirectamente a través del EM – el tipo de EM determina cómo un contexto de persistencia es creado y borrado
Manejador de Entidad (EM) Realiza operaciones del ciclo de vida en entidades –
administra el contexto de persistencia
Operaciones de ciclo Operaciones de ciclo de vida de una Entidadde vida de una Entidad
Administrador de Entidad (EM)Administrador de Entidad (EM)
En funcionalidad es similar a el Hibernate Session, JDO PErsistanceManajer, etc
Controla el ciclo de vida de las entidades persist() – inserta una entidad a la BD remove() – remueve una entidad de la BD merge() – sincroniza el estado de entidades
separadas refresh() – refresca el estado desde la BD
Operación de PersistenciaOperación de Persistencia
public Order createNewOrder(Customer customer) {Order order = new Order(customer);// Transitions new instances to managed. On
the// next flush or commit, the newly persisted// instances will be inserted into the datastore.entityManager.persist(order);return order;
}
Operaciones de Búsqueda y EliminaciónOperaciones de Búsqueda y Eliminación
public void removeOrder(Long orderId) {Order order = entityManager.find(Order.class,
orderId);// The instances will be deleted from the
datastore// on the next flush or commit. Accessing a// removed entity has undefined results.entityManager.remove(order);
}
Operación de MergeOperación de Merge
public OrderLine updateOrderLine(OrderLine orderLine) {// The merge method returns a managed copy
of// the given detached entity. Changes made to
the// persistent state of the detached entity are// applied to this managed instance.return entityManager.merge(orderLine);
}
TransaccionesTransacciones
Tipos de TransaccionesTipos de Transacciones
Dos tipos de transacciones Transacciones de recurso local (Resource - local) JTA (Java Transaction API)
Participan múltiples recursos Transacciones XA distribuidas
El tipo de transacción es definido en la unidad de persistencia (archivo persistance.xml) El valor default es JTA para JavaEE y RESOURCE_LOCAL
para Java SE EM administrado por un contendor utiliza
transacciones de JTA Propagación del contexto de persistencia con
transacciones de JTA es gestionado por el contenedor – compartiendo el mismo contexto de persistencia entre múltiples EMs
Transacciones Y Contexto de PersistenciaTransacciones Y Contexto de Persistencia
Las transacciones definen cuando las entidades nuevas, modificadas, o borradas so sincronizadas con la base de datos
La creación y uso del contexto de persistencia es determinado por el tipo de Transacción (Resource-local o JTA) y el atributo de Transacción (REQUIRED o ..)
Mapeo a O/RMapeo a O/R
Mapeo a O/RMapeo a O/R
Conjunto de annotations extenso definido por el mapeo Relaciones Joins Tablas y columnas de BD Generadores de secuencias de BD
Especificadas utilizando Annotations en el código Archivo de mapeo por separado
Mapeos SimplesMapeos Simples
@Entity(access=FIELD)public class Customer {
@Idint id;
String name;
@Column(name=“CREDIT”)int c_rating;
@LobImage photo;
}
CUSTOMER
ID NAME CREDIT PHOTO
Ejemplo de Mapeo O/R Ejemplo de Mapeo O/R
@Entity@Table(name="EMPLOYEE",
schema="EMPLOYEE_SCHEMA")uniqueConstraints={@UniqueConstraint(columnNames={"EMP_ID
", "EMP_NAME"})}
public class EMPLOYEE {... @Column(name="NAME", nullable=false,
length=30)public String getName() { return name; }
}
Relaciones de Relaciones de EntidadesEntidades
Relaciones de EntidadesRelaciones de Entidades
Modela asociación entre entidades Soporta relaciones tanto unidireccionales como
bidireccionales Relación unidireccional: Entidad A hace referencia a
B, pero B no hace referencia a A Cardinalidades
Uno a uno Uno a muchos Muchos a uno Muchos a muchos
Relaciones de Entidades: Relaciones de Entidades: Ejemplo Muchos a MuchosEjemplo Muchos a Muchos
@Entitypublic class Project {
private Collection<Employee> employees;
@ManyToManypublic Collection<Employee> getEmployees() {
return employees;}
public void setEmployees(Collection<Employee> employees) {this.employees = employees;
}...
}
Comportamiento en CascadaComportamiento en Cascada
“Cascading” es utilizado para propagar el efecto de una operación en todas las entidades relacionadas Cascade = PERSIST Cascade = REMOVE Cascade = MERGE Cascade = REFRESH Cascade = ALL
QUERYQUERY
Mejora a EJB-QL Mejora a EJB-QL
Soporta queries dinámicos, además de queries prefabricados o queries estáticos
Queries polimórficos Operaciones de actualización y eliminación en
grandes bloques Joins Agrupaciones Subqueries Funciones de SQL Adicionales
UPPER, LOWER, TRIM, CURRENT_DATE
QueriesQueries
Queries Estáticos Definidos con metadatos de lenguaje de java o XML
Annotations: @NamedQuery, @NamedNativeQuery Queries Dinámicos
El query se especifica en tiempo de ejecución Utiliza Lenguaje de Query de Persistencia de Java
o SQL Parámetros nombrados o posicionados El EM es fábrica de objetos de query
createNamedQuery, createQuery, createNativeQuery
Métodos de query para contolar resultados máximos, paginación, modo flush
Queries DinámicosQueries Dinámicos
// Build and execute queries dynamically at runtime.public List findWithName (String name) {
return em.CreateQuery (“SELECT c FROM Customer c ” +“WHERE c.name LIKE :custName”).setParameter(“custName”, name).setMaxResults(10).getResultList();
}
Named QueryNamed Query
// Named queries are a useful way to create reusable queries
@NamedQuery( name=“findCustomersByName”,queryString=“SELECT c FROM Customer c ” +“WHERE c.name LIKE :custName”
)
@PersistenceContext public EntityManager em;List customers =em.createNamedQuery(“findCustomersByName”).
setParameter(“custName”, “smith”).getResultList();
ReferenciasReferencias
Java Persistence API: Simplifying PersistenceSang ShinJava Technology EvangelistSun Microsystems, Inc.
top related