Java Persistence API
Java Persistence API
Java Persistence API
Proveedor de
persistencia
(eclipse link)
Lista de
entidades
Propiedades de
conexión con la
BF
El EntityManager es un elemento que administra las
operaciones sobre las entidades. La clase
javax.persistence.EntityManager es la interfaz principal de
JPA utilizada para la persistencia de las aplicaciones. Cada
EntityManager puede realizar operaciones CRUD (Create,
Read, Update, Delete) sobre un conjunto de objetos
persistentes. El EntityManager se crea a a partir de los
datos definidos en la unidad de persistencia. En una
aplicación de escritorio el EntityManager se crea así:
Persistence.createEntityManagerFactory crea una factoría(fabrica de
objetos). Esta factoría recibe como parámetro el nombre de la unidad de
persistencia definido en el XML. El EntityManagerFactory es el encargado de
crear el EntityManager.
Se crea la
transaccion
Inicio transaccion
Operaciones de
persistencia
Fin transaccion
Cuando se persiste, edita o elimina una entidad.
Las entidades poseen atributos que en muchas
ocasiones no nos tipos de datos primitivos, si no
otras entidades.
Si se creara el empleado y se le asignara el
arreglo de teléfonos, este se debería almacenar
junto con el empleado sin mas esfuezo. Para que
ocurra este comportamiento se configuran las
relaciones en la entidad principal con el
parametro cascade.
La propiedad cascade define con qué tipo de operaciones se
realizarán operaciones en "cascada", es decir se propagarán a las
entidades relacionadas, en nuestro caso a los proyectos. Esta
propiedad puede tener los siguientes valores:
CascadeType.PERSIST - Cuando persistamos la entidad todas las
entidades que contenga esta variable serán persistidas también.
CascadeType.REMOVE - Cuando borremos la entidad todas las
entidades que contenga esta variable se borrarán del mismo modo.
CascadeType.REFRESH - Cuando actualicemos la entidad todas las
entidades que contenga esta variable se actualizarán.
CascadeType.MERGE - Cuando hagamos un "merge" de la entidad
todas las entidades que contenga esta variable realizarán la misma
operación.
CascadeType.ALL - Todas las operaciones citadas anteriormente.
Indica que los telefonos se
almacenaran junto con su
empleado cuando este se persista,
modifique o eliminen.
Como se dijo en el persist, la actualización de un registro a
través del EntityManager se debe hacer dentro de una
transacción. Para actualizar un registro se usa el método
merge que recibe como parametro la entidad.
Se busca y cambia el
nombre
Se crea la transaccion
Se actualiza
Se actualizase cierra
la transaccion
Para borrar se usa el método remove. El uso de este método debe estar
enmarcado dentro de una transacción. El método recibe la entidad a eliminar.
Se busca y cambia el
nombre
Se crea la transaccion
Se actualiza
Se actualizase cierra
la transaccion
Las operaciones básicas sobre las entidades
no son suficientes para implementar todas las
funcionalidades de una aplicación. El find del
entitymanager solo entrega la entidad que
tenga la PK solicitada. Pero si se necesitara
todos los empleados, o todos los empleados
gerentes, o todos los cargos cuyo sueldo esta
entre 1’000.000 y 2’ooo.ooo,el método find
no sirve para esto.
Para realizar consultas sobre las entidades en
JPA se usa un lenguaje muy similar al SQL
llamado JPQL (Java Persistence Java
Language). Este lenguaje es independiente
del modo en como se implemente la
persistencia, ya sea en BD, archivos,
repositorios de objetos, etc.
JPQL tiene sentencias de tipo select, update
y delete donde las consultas que usan estas
sentencias se ejecutan sobre los objetos
administrados por el EntityManager.
Una consulta select es un String que contiene las
siguientes partes:
select : donde se determinan los objetos o valores a ser
seleccionados.
from: aquí se provee las declaraciones de los objetos a
consultar, las expresiones definidas en las otras clausulas
de la consulta operaran sobre estos objetos.
where: restringe los resultados entregados por la consulta.
En general, la estructura de una consulta es la
siguiente:
select [valores a consultar del objeto obj] from Entity obj where [condiciones]
Seleccionar todos los empleados:
Select emp from Empleado emp
emp.nomina.puesto.id=1
Empleado de Atributo Puesto que esta
la consulta nomina del en El Id del puesto
empleado nomina(empleo)
La consultas en JPQL se crean a través de la
Clase Query. Para crear una consulta se usa el
método createQuery del EntityManager.
Query q=em.createQuery(Stringconsulta)
Para obtener el resultado de la consulta usa el
método de Query getResultList() para obtener
una lista de resultados o getSingleResult() para
obtener un solo resultado.
getResultList() retorna un List de entidades.
Query q=em.createQuery(“select emp from Empleado emp”);
List<Empleado> trabajadores=q.getResultList();
List<Puesto> puestos=q.getResultList();