java persistance api jpa. ¿qué es una entidad? ¿qué es una entidad? plain old java object(pojo)...

34
Java Persistance Java Persistance API API JPA JPA

Upload: robertina-regino

Post on 02-Apr-2015

112 views

Category:

Documents


6 download

TRANSCRIPT

Page 1: Java Persistance API JPA. ¿Qué es una Entidad? ¿Qué es una entidad?  Plain Old Java Object(POJO)  Se crean por medio de la palabra reservada new

Java Persistance Java Persistance APIAPI

JPAJPA

Page 2: Java Persistance API JPA. ¿Qué es una Entidad? ¿Qué es una entidad?  Plain Old Java Object(POJO)  Se crean por medio de la palabra reservada new

¿Qué es una ¿Qué es una Entidad?Entidad?

Page 3: Java Persistance API JPA. ¿Qué es una Entidad? ¿Qué es una entidad?  Plain Old Java Object(POJO)  Se crean por medio de la palabra reservada new

¿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

Page 4: Java Persistance API JPA. ¿Qué es una Entidad? ¿Qué es una entidad?  Plain Old Java Object(POJO)  Se crean por medio de la palabra reservada new

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;}…

}

Page 5: Java Persistance API JPA. ¿Qué es una Entidad? ¿Qué es una entidad?  Plain Old Java Object(POJO)  Se crean por medio de la palabra reservada new

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

Page 6: Java Persistance API JPA. ¿Qué es una Entidad? ¿Qué es una entidad?  Plain Old Java Object(POJO)  Se crean por medio de la palabra reservada new

Modelo de Modelo de ProgramaciónProgramación

Page 7: Java Persistance API JPA. ¿Qué es una Entidad? ¿Qué es una entidad?  Plain Old Java Object(POJO)  Se crean por medio de la palabra reservada new

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}

Page 8: Java Persistance API JPA. ¿Qué es una Entidad? ¿Qué es una entidad?  Plain Old Java Object(POJO)  Se crean por medio de la palabra reservada new

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

Page 9: Java Persistance API JPA. ¿Qué es una Entidad? ¿Qué es una entidad?  Plain Old Java Object(POJO)  Se crean por medio de la palabra reservada new

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...

}

Page 10: Java Persistance API JPA. ¿Qué es una Entidad? ¿Qué es una entidad?  Plain Old Java Object(POJO)  Se crean por medio de la palabra reservada new

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

Page 11: Java Persistance API JPA. ¿Qué es una Entidad? ¿Qué es una entidad?  Plain Old Java Object(POJO)  Se crean por medio de la palabra reservada new

Contexto de Contexto de Persistencia y Persistencia y

Manejador de EntidadManejador de Entidad

Persistance Context & Persistance Context & Entity Manager (EM)Entity Manager (EM)

Page 12: Java Persistance API JPA. ¿Qué es una Entidad? ¿Qué es una entidad?  Plain Old Java Object(POJO)  Se crean por medio de la palabra reservada new

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

Page 13: Java Persistance API JPA. ¿Qué es una Entidad? ¿Qué es una entidad?  Plain Old Java Object(POJO)  Se crean por medio de la palabra reservada new

Operaciones de ciclo Operaciones de ciclo de vida de una Entidadde vida de una Entidad

Page 14: Java Persistance API JPA. ¿Qué es una Entidad? ¿Qué es una entidad?  Plain Old Java Object(POJO)  Se crean por medio de la palabra reservada new

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

Page 15: Java Persistance API JPA. ¿Qué es una Entidad? ¿Qué es una entidad?  Plain Old Java Object(POJO)  Se crean por medio de la palabra reservada new

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;

}

Page 16: Java Persistance API JPA. ¿Qué es una Entidad? ¿Qué es una entidad?  Plain Old Java Object(POJO)  Se crean por medio de la palabra reservada new

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);

}

Page 17: Java Persistance API JPA. ¿Qué es una Entidad? ¿Qué es una entidad?  Plain Old Java Object(POJO)  Se crean por medio de la palabra reservada new

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);

}

Page 18: Java Persistance API JPA. ¿Qué es una Entidad? ¿Qué es una entidad?  Plain Old Java Object(POJO)  Se crean por medio de la palabra reservada new

TransaccionesTransacciones

Page 19: Java Persistance API JPA. ¿Qué es una Entidad? ¿Qué es una entidad?  Plain Old Java Object(POJO)  Se crean por medio de la palabra reservada new

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

Page 20: Java Persistance API JPA. ¿Qué es una Entidad? ¿Qué es una entidad?  Plain Old Java Object(POJO)  Se crean por medio de la palabra reservada new

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 ..)

Page 21: Java Persistance API JPA. ¿Qué es una Entidad? ¿Qué es una entidad?  Plain Old Java Object(POJO)  Se crean por medio de la palabra reservada new

Mapeo a O/RMapeo a O/R

Page 22: Java Persistance API JPA. ¿Qué es una Entidad? ¿Qué es una entidad?  Plain Old Java Object(POJO)  Se crean por medio de la palabra reservada new

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

Page 23: Java Persistance API JPA. ¿Qué es una Entidad? ¿Qué es una entidad?  Plain Old Java Object(POJO)  Se crean por medio de la palabra reservada new

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

Page 24: Java Persistance API JPA. ¿Qué es una Entidad? ¿Qué es una entidad?  Plain Old Java Object(POJO)  Se crean por medio de la palabra reservada new

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; }

}

Page 25: Java Persistance API JPA. ¿Qué es una Entidad? ¿Qué es una entidad?  Plain Old Java Object(POJO)  Se crean por medio de la palabra reservada new

Relaciones de Relaciones de EntidadesEntidades

Page 26: Java Persistance API JPA. ¿Qué es una Entidad? ¿Qué es una entidad?  Plain Old Java Object(POJO)  Se crean por medio de la palabra reservada new

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

Page 27: Java Persistance API JPA. ¿Qué es una Entidad? ¿Qué es una entidad?  Plain Old Java Object(POJO)  Se crean por medio de la palabra reservada new

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;

}...

}

Page 28: Java Persistance API JPA. ¿Qué es una Entidad? ¿Qué es una entidad?  Plain Old Java Object(POJO)  Se crean por medio de la palabra reservada new

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

Page 29: Java Persistance API JPA. ¿Qué es una Entidad? ¿Qué es una entidad?  Plain Old Java Object(POJO)  Se crean por medio de la palabra reservada new

QUERYQUERY

Page 30: Java Persistance API JPA. ¿Qué es una Entidad? ¿Qué es una entidad?  Plain Old Java Object(POJO)  Se crean por medio de la palabra reservada new

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

Page 31: Java Persistance API JPA. ¿Qué es una Entidad? ¿Qué es una entidad?  Plain Old Java Object(POJO)  Se crean por medio de la palabra reservada new

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

Page 32: Java Persistance API JPA. ¿Qué es una Entidad? ¿Qué es una entidad?  Plain Old Java Object(POJO)  Se crean por medio de la palabra reservada new

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();

}

Page 33: Java Persistance API JPA. ¿Qué es una Entidad? ¿Qué es una entidad?  Plain Old Java Object(POJO)  Se crean por medio de la palabra reservada new

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();

Page 34: Java Persistance API JPA. ¿Qué es una Entidad? ¿Qué es una entidad?  Plain Old Java Object(POJO)  Se crean por medio de la palabra reservada new

ReferenciasReferencias

Java Persistence API: Simplifying PersistenceSang ShinJava Technology EvangelistSun Microsystems, Inc.