API
JPA
¿Qué es una
Entidad?
¿Qué es una entidad?
@Entity
public
bli class
l Customer
C t implements
i l t Serializable
S i li bl {
@Id protected Long id;
protected String name;
@Embedded p 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
{this.name
name = name;}
…
}
Llave primaria (Pk
(Pk - Id) de la Entidad
...
// Relationship between Customer and Orders
@OneToMany
public Collection<Order> g
p getOrders()
() {
return orders;
}
public void setOrders(Collection<Order> orders) {
this.orders = orders;
}
// Other business methods
...
}
Código de Cliente: De Java SE Client
¬ Contexto de Persistencia
R
Representa un conjunto
j d
de instancias
i i d de entidad
id d
administradas por la capa de persistencia en tiempo de
ejecución
“Una instancia de Entidad es un estado administrado”
significa
i ifi que lla iinstancia
i está á contenida
id en un contexto d
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
d i i t ell contexto
t t d de persistencia
i t i
Operaciones de ciclo
de vida de una Entidad
Administrador de Entidad (EM)
¬ Conjunto
j de annotations extenso definido p
por el
mapeo
Relaciones
Joins
J i
Tablas y columnas de BD
Generadores de secuencias de BD
¬ Especificadas utilizando
Annotations en el código
Archivo de mapeo por separado
Mapeos Simples
@Entity(access=FIELD) CUSTOMER
public class Customer { ID NAME CREDIT PHOTO
@Id
int id;
String name;
@Column(name=“CREDIT”)
int c_rating;
@Lob
Image photo;
}
Ejemplo de Mapeo O/R
@Entity
@ y
@Table(name="EMPLOYEE",
schema="EMPLOYEE_SCHEMA")
uniqueConstraints=
{@UniqueConstraint(columnNames={"EMP_ID",
"EMP_NAME"})}
@ManyToMany
public Collection<Employee> getEmployees() {
return employees;
p y ;
}
¬ “Cascading”
g es utilizado p
para propagar
p p g el efecto
de una operación en todas las entidades
relacionadas
Cascade = PERSIST
Cascade = REMOVE
Cascade = MERGE
Cascade = REFRESH
Cascade = ALL
QUERY
Mejora a EJB
EJB--QL
¬ Soporta
p queries dinámicos,, además de q
q queries
prefabricados o queries estáticos
¬ Queries polimórficos
¬ Operaciones de actualización y eliminación en
grandes bloques
¬ Joins
¬ Agrupaciones
¬ Subqueries
q
¬ Funciones de SQL Adicionales
UPPER, LOWER, TRIM, CURRENT_DATE
Queries
¬Q
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ámicos
// Named q
queries are a useful way
y to create reusable queries
q
@NamedQuery(
name=“findCustomersByName”,
queryString=“SELECT c FROM Customer c ” +
“WHERE c.name LIKE :custName”
)