SlideShare una empresa de Scribd logo
1 de 18
Descargar para leer sin conexión
Tecnologı́as SI.
Capa de persistencia (II)
Java Persistence API (JPA) – Ampliación
MEI-SI, 2018
Octubre 2018
Contenido
Mapeo de la herencia en JPA
Validaciones Bean Validation
Consultas JPQL
Criteria API
TAREAS PARA PRÓXIMA SEMANA
Mapeo de herencia en JPA I
Posibilidad de mapeo de herencia entre entidades.
I Superclase puede ser o no una entidad JPA
I Superclase (abstracta o concreta) es una entidad JPA mapeada
I Superclase no es entidad JPA, pero porta información de mapeo
I superclase marcada con @MappedSuperclass
I subclases son entidades JPA y reutilizan el mapeo indicado en la
superclase
I Superclase no entidad JPA
I superclase ”normal” sin información de mapeo
I JPA no maneja directamente esas información
I Entidades JPA pueden ser extendidas con subclases no entidad
Mapeo de herencia en JPA II
Control de la herencia en JPA
I Anotación @Inheritance(strategy=’...’) en la entidad
superclase controla el modo de mapeo de la herencia
I InheritanceType.SINGLE_TABLE: una única tabla común
para superclase y subclase (con ”nulos”)
I InheritanceType.TABLE_PER_CLASS: una tabla por subclase
concreta (incluye los atributos heredados y los propios)
I InheritanceType.JOINED: una tabla por clase, tanto
superclase (atributos heredados) como subclase (atributos
propios)
I Control del mapeo de herencia con @DiscriminatorColumn (en
superclase) y @DiscriminatorValue (en subclases)
I Anotación @MappedSuperclass usada en superclases que no son
entidades JPA (no mapeadas)
I Usa una estrategia equivalente a TABLE_PER_CLASS
I Posibilidad de incluir anotaciones de mapeo JPA en sus atributos
(”heredadas” por sus subclases entidad)
Mapeo de herencia en JPA III
Ejemplos
@Entity
@Inheritance(strategy=[TipoEstrategia])
public abstract class Persona {
@Id long id;
String nombre;
...
}
@Entity
public class Profesor extends Persona {
@Enumerated TipoProfesor tipo;
Double sueldo;
@ManyToOne List<Materia> materias;
...
}
@Entity
public class Alumno extends Persona {
@ManyToOne List<Materia> materias;
...
}
[TipoEstrategia]
SINGLE TABLE 1 tabla común con todos los atributos
TABLE PER CLASS 2 tablas (Profesor, Alumno)
JOINED 3 tablas (Persona, Profesor, Alumno)
@MappedSuperclass
public abstract class Persona {
@Id long id;
String nombre;
...
}
@Entity
public class Profesor extends Persona {
@Enumerated TipoProfesor tipo;
Double sueldo;
@ManyToOne List<Materia> materias;
...
}
@Entity
public class Alumno extends Persona {
@ManyToOne List<Materia> materias;
...
}
2 tablas (Profesor, Alumno)
Contenido
Mapeo de la herencia en JPA
Validaciones Bean Validation
Consultas JPQL
Criteria API
TAREAS PARA PRÓXIMA SEMANA
Validaciones Bean Validation
Bean Validation ofrece un framework para definición de metadatos
sobre objetos Java y para la validación de los mismos
I Proporciona anotaciones para vincular restricciones sobre los
atributos de objetos Java (incluyendo Entidades JPA)
I Automatiza la validación de estas restricciones
I Disponible en las diversas capas de la aplicación
I En capa de persistencia para validar la corrección de las entidades JPA
I En capa de presentación para validar las entradas de usuario
I Permite la definición de anotaciones de validación personalizadas
I Definido en JSR 303, ver https://beanvalidation.org/
I Implementación de referencia: Hibernate Validator
URL: http://hibernate.org/validator/
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.0.13.Final</version>
</dependency>
Aclaración: Las anotaciones Bean Validation son complementarias a las de los mapeos
JPA (no las reemplazan).
@Entity
public class Entidad {
@Column(length=10)
@Size(max = 10)
private String campo;
...
}
I @Column especifica detalles del mapeo JPA (afecta a la generación de
código DDL de la correspondiente tabla)
I @Size establece una restricción respecto al tamaño del atributo
Anotaciones Bean Validation
Vinculadas a la definición de atributos, métodos set() o parámetros
de métodos
@Min(v) Valor debe ser menor o igual que el indicado
@Max(v) Valor debe ser menor o igual que el indicado
@DecimalMax(v) Valor decimal debe ser menor o igual que el indicado
@DecimalMin(v) Valor decimal debe ser mayor o igual que el indicado
@Digit(integer=i, fraction=f) Longitud valor numérico debe coincidir con especificaciones
@Future El valor de una fecha debe situarse en el futuro
@Past El valor de una fecha debe situarse en el pasado
@NotNull El valor no puede ser null
@Null El valor debe ser null
@NotBlank El valor de la cadena debe contener al menos un caracter no espacio
@Pattern(regexp="p") El valor de la cadena debe coincidir con el patrón indicado
@Size(min=i,max=x) El tamaño (de una cadena, de una colección, de un array)
debe cumplir la restricción indicada
@NotEmpty La (cadena, colección, array) no puede estar vacı́a
@AssertTrue El valor debe ser true
@AssertFalse El valor debe ser false
Otras: @PastOrPresent, @ FutureOrPresent, @Positive,@Negative, @Email, ...
Más detalles (Java EE 8 tutorial):
https://javaee.github.io/tutorial/bean-validation002.html
Validaciones definidas por usuario
Posibilidad de definir validaciones propias
I Aplicables sobre atributos (anotan definición de atributos) o sobre
objetos completos (anotan las clases)
I Supone definir:
1. Una anotación propia
I que herede de @Document
I que declare @Constraint(validatedBy=ClaseValidadora.class)
2. Una clase validadora
I que implemente la interface ConstraintValidator<>
I debe definir los métodos initialize() y isValid()
Ejemplo Validación propia @Nif
@Target({ METHOD, FIELD, ANNOTATION_TYPE })
@Retention(RUNTIME)
@Constraint(validatedBy = NifValidator.class)
@Documented
public @interface Nif {
String message() default "{constraint nif}";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
@Entity
public class Usuario {
@Id
@Nif
private String nif;
...
}
public class NifValidator implements
ConstraintValidator<Nif, String> {
private String letters = "TRWAGMYFPDXBNJZSQVHLCKE";
private Pattern mask = Pattern.compile("[0-9]{8,8}[A-Z]");
@Override
public void initialize(Nif constraintAnnotation) {}
@Override
public boolean isValid(String value,
ConstraintValidatorContext context) {
Matcher matcher = mask.matcher(value);
if (!matcher.matches()){
return false;
}
String dni = value.substring(0,8);
String control = value.substring(8,9);
int position = Integer.parseInt(dni)%23;
String controlCalculated =
letters.substring(position,position+1);
if (!control.equalsIgnoreCase(controlCalculated)){
return false;
}
return true;
}
}
Contenido
Mapeo de la herencia en JPA
Validaciones Bean Validation
Consultas JPQL
Criteria API
TAREAS PARA PRÓXIMA SEMANA
Consultas JPQL I
JPQL: Java Persistence Query Language
I Ofrece sintaxis similar a la de SQL para realizar consultas sobre
entidades JPA
I Clausula FROM maneja nombres de Entidades (no tablas)
I Hace uso de las relaciones mapeadas 1:N o N:M para definir
los JOINs entre tablas relacionadas
I Sintaxis: IN ó JOIN
I No necesario con relaciones 1:1 o N:1
I Nombres de campos usan notación Java: Entidad.atributo
I Los elementos manejados en WHERE o devueltos por SELECT
son siempre objetos
I Se permiten consultas de tipo SELECT, UPDATE y DELETE
Consultas JPQL II
Consultas (objetos de tipo Query ó TypedQuery desde JPA 2.1)
son creadas por el EM
Query createQuery(String query) : crea una consulta JPQL
Query createNamedQuery(String namedQuery) : crea una consulta
nombrada, vinculada a una Entidad y definida con la
anotación
@NamedQuery(name="...", queryString="...")
Query createNativeQuery(String query) : crea una consulta SQL
Nota: Para la creación de TypedQuery la sintaxis es la misma, añadiendo
el tipo de la clase que devolverá la consulta (evita un cast explı́cito).
TypedQuery<Articulos> query = em.createQuery("SELECT a FROM Articulo a", Articulo.class);
Consultas JPQL III
Ejecución de consultas
Object getSingleResult() : devuelve un objeto con el resultado
único de la consulta
I Devuelve un array (Object[]) cuando SELECT especifica varios
valores
List getResultList() : devuelve una colección List con los resultados
de la consulta
I Se puede especificar el rango de valores a devolver (útil para
paginar resultados)
I Query setFirstResult(int): inicio del rango
I Query setMaxResults(int): tamaño del rango
int executeUpdate() : ejecución de Querys de tipo UPDATE o
DELETE
Nota: Con TypedQuery los valores devueltos (simple o lista) estan
tipados según se indicara en la creación de la TypedQuery.
Consultas JPQL IV
Consultas parametrizadas
I Notación:

:nombre (paramétros con nombre)
?3 (parámetros posicionales)
I Métodos de la clase Query
Query setParameter(String s, Object o) : asocia valor a un parámetro
nombrado
Query setParameter(int pos, Object o) : asocia valor a un parámetro
posicional
Ejemplos:
I Lista de artı́culos cuya descripción empiece por CPU, ”paginados” de 10 en 10
TypeQueryArticulo q1 = em.createQuery(SELECT a FROM Articulo a +
WHERE a.descripcion LIKE CPU% , Articulo.class);
ListArticulo lista;
int i = 0;
do {
q1.setFirstResult(i);
q1.setMaxResult(10);
lista = q1.getResultList();
i = i + 10;
...
} while (lista !=null);
Consultas JPQL V
I Lista de pares (Pedido, importe total pedido) entre 2 fechas
Query q2 = em.createQuery(SELECT p, SUM(l.cantidad * l.articulo.precio)+
FROM Pedido p JOIN p.lineas+
WHERE p.fecha BETWEEN :fechaIni AND :fechaFin+
GROUP BY p.numPedido);
q2.setParameter(fechaIni, new Date(.....));
q2.setParameter(fechaFin, new Date(.....));
Iterator pares = q2.getResultList().iterator();
for(Object[] par: pares) {
pedido = (Pedido) par[0];
total = (Float) par[1];
...
}
Contenido
Mapeo de la herencia en JPA
Validaciones Bean Validation
Consultas JPQL
Criteria API
TAREAS PARA PRÓXIMA SEMANA
Criteria API I
pendiente

Más contenido relacionado

Similar a Persistencia avanzada de datos en Java. JPA

Carro De Compras
Carro De ComprasCarro De Compras
Carro De Comprasriqsiq
 
[ES] Manejadores de persistencia
[ES] Manejadores  de persistencia[ES] Manejadores  de persistencia
[ES] Manejadores de persistenciaEudris Cabrera
 
Tema 4 clases_y_objetos
Tema 4 clases_y_objetosTema 4 clases_y_objetos
Tema 4 clases_y_objetosBelenMonse
 
Comandos de Raptor, Java y C# Sharp
Comandos de Raptor, Java y C# SharpComandos de Raptor, Java y C# Sharp
Comandos de Raptor, Java y C# SharpAna Ruth G H
 
Taller de repaso de metodos y arreglos
Taller de repaso de metodos y arreglosTaller de repaso de metodos y arreglos
Taller de repaso de metodos y arreglosDiroplan
 
Diseño de la logica
Diseño de la logicaDiseño de la logica
Diseño de la logicaanych27
 
Jyoc java-cap06 la clase string
Jyoc java-cap06 la clase stringJyoc java-cap06 la clase string
Jyoc java-cap06 la clase stringJyoc X
 
Lenguaje de Programacion - Java
Lenguaje de Programacion - JavaLenguaje de Programacion - Java
Lenguaje de Programacion - Javazousbabastre
 
Clase3 asignaciones
Clase3 asignacionesClase3 asignaciones
Clase3 asignacionesjorg_marq
 
Arrays en PHP y Funciones de Mysql
Arrays en PHP y Funciones de MysqlArrays en PHP y Funciones de Mysql
Arrays en PHP y Funciones de MysqlCreativos Online S.A
 
Descomposicion funcional parte ii 2013 2
Descomposicion funcional parte ii 2013 2Descomposicion funcional parte ii 2013 2
Descomposicion funcional parte ii 2013 2IngEsquivel
 
Presentacion de vectores
Presentacion de vectoresPresentacion de vectores
Presentacion de vectoresletty20151998
 

Similar a Persistencia avanzada de datos en Java. JPA (20)

Carro De Compras
Carro De ComprasCarro De Compras
Carro De Compras
 
[ES] Manejadores de persistencia
[ES] Manejadores  de persistencia[ES] Manejadores  de persistencia
[ES] Manejadores de persistencia
 
Tema 4 clases_y_objetos
Tema 4 clases_y_objetosTema 4 clases_y_objetos
Tema 4 clases_y_objetos
 
Comandos de Raptor, Java y C# Sharp
Comandos de Raptor, Java y C# SharpComandos de Raptor, Java y C# Sharp
Comandos de Raptor, Java y C# Sharp
 
Taller de repaso de metodos y arreglos
Taller de repaso de metodos y arreglosTaller de repaso de metodos y arreglos
Taller de repaso de metodos y arreglos
 
Diseño de la logica
Diseño de la logicaDiseño de la logica
Diseño de la logica
 
Jyoc java-cap06 la clase string
Jyoc java-cap06 la clase stringJyoc java-cap06 la clase string
Jyoc java-cap06 la clase string
 
Arreglos, Procedimientos y Funciones
Arreglos, Procedimientos y FuncionesArreglos, Procedimientos y Funciones
Arreglos, Procedimientos y Funciones
 
8.Clases y objetos Java
8.Clases y objetos Java8.Clases y objetos Java
8.Clases y objetos Java
 
Lenguaje de Programacion - Java
Lenguaje de Programacion - JavaLenguaje de Programacion - Java
Lenguaje de Programacion - Java
 
Clase3 asignaciones
Clase3 asignacionesClase3 asignaciones
Clase3 asignaciones
 
feedback
feedbackfeedback
feedback
 
C2 clases en java
C2 clases en javaC2 clases en java
C2 clases en java
 
Resulteset
ResultesetResulteset
Resulteset
 
Arrays en PHP y Funciones de Mysql
Arrays en PHP y Funciones de MysqlArrays en PHP y Funciones de Mysql
Arrays en PHP y Funciones de Mysql
 
Leccion 7 Java
Leccion 7 JavaLeccion 7 Java
Leccion 7 Java
 
Introduccio al Java
Introduccio al JavaIntroduccio al Java
Introduccio al Java
 
Descomposicion funcional parte ii 2013 2
Descomposicion funcional parte ii 2013 2Descomposicion funcional parte ii 2013 2
Descomposicion funcional parte ii 2013 2
 
Perl2 arrays
Perl2 arraysPerl2 arrays
Perl2 arrays
 
Presentacion de vectores
Presentacion de vectoresPresentacion de vectores
Presentacion de vectores
 

Último

G4 - CASO DE ESTUDIO - VOLUMEN DE UN RESERVORIO (1).pptx
G4 - CASO DE ESTUDIO - VOLUMEN DE UN RESERVORIO (1).pptxG4 - CASO DE ESTUDIO - VOLUMEN DE UN RESERVORIO (1).pptx
G4 - CASO DE ESTUDIO - VOLUMEN DE UN RESERVORIO (1).pptxMaxPercyBorjaVillanu
 
Cereales tecnología de los alimentos. Cereales
Cereales tecnología de los alimentos. CerealesCereales tecnología de los alimentos. Cereales
Cereales tecnología de los alimentos. Cerealescarlosjuliogermanari1
 
Aportes a la Arquitectura de Le Corbusier y Mies Van der Rohe
Aportes a la Arquitectura de Le Corbusier y Mies Van der RoheAportes a la Arquitectura de Le Corbusier y Mies Van der Rohe
Aportes a la Arquitectura de Le Corbusier y Mies Van der RoheElisaLen4
 
CAPACITACIÓN EN AGUA Y SANEAMIENTO EN ZONAS RURALES
CAPACITACIÓN EN AGUA Y SANEAMIENTO EN ZONAS RURALESCAPACITACIÓN EN AGUA Y SANEAMIENTO EN ZONAS RURALES
CAPACITACIÓN EN AGUA Y SANEAMIENTO EN ZONAS RURALESJHONJAIROVENTURASAUC
 
UC Fundamentos de tuberías en equipos de refrigeración m.pdf
UC Fundamentos de tuberías en equipos de refrigeración m.pdfUC Fundamentos de tuberías en equipos de refrigeración m.pdf
UC Fundamentos de tuberías en equipos de refrigeración m.pdfrefrielectriccarlyz
 
Balance materia y energia procesos de Secado
Balance materia y energia procesos de SecadoBalance materia y energia procesos de Secado
Balance materia y energia procesos de SecadoGualbertoLopez2
 
TAIICHI OHNO, historia, obras, reconocimientos
TAIICHI OHNO, historia, obras, reconocimientosTAIICHI OHNO, historia, obras, reconocimientos
TAIICHI OHNO, historia, obras, reconocimientoscuentaparainvestigac
 
entropia y neguentropia en la teoria general de sistemas
entropia y neguentropia en la teoria general de sistemasentropia y neguentropia en la teoria general de sistemas
entropia y neguentropia en la teoria general de sistemasDerlyValeriaRodrigue
 
Video sustentación GA2- 240201528-AA3-EV01.pptx
Video sustentación GA2- 240201528-AA3-EV01.pptxVideo sustentación GA2- 240201528-AA3-EV01.pptx
Video sustentación GA2- 240201528-AA3-EV01.pptxcarlosEspaaGarcia
 
GUIA DE SEGURIDAD PARA VENTILACION DE MINAS-POSITIVA.pdf
GUIA DE SEGURIDAD PARA VENTILACION DE MINAS-POSITIVA.pdfGUIA DE SEGURIDAD PARA VENTILACION DE MINAS-POSITIVA.pdf
GUIA DE SEGURIDAD PARA VENTILACION DE MINAS-POSITIVA.pdfWILLIAMSTAYPELLOCCLL1
 
Tippens fisica 7eDIAPOSITIVAS TIPENS Tippens_fisica_7e_diapositivas_33.ppt
Tippens fisica 7eDIAPOSITIVAS TIPENS Tippens_fisica_7e_diapositivas_33.pptTippens fisica 7eDIAPOSITIVAS TIPENS Tippens_fisica_7e_diapositivas_33.ppt
Tippens fisica 7eDIAPOSITIVAS TIPENS Tippens_fisica_7e_diapositivas_33.pptNombre Apellidos
 
ARMADURAS METODO NODOS.pptx......................
ARMADURAS METODO NODOS.pptx......................ARMADURAS METODO NODOS.pptx......................
ARMADURAS METODO NODOS.pptx......................Juan293605
 
Tema ilustrado 9.2.docxbbbbbbbbbbbbbbbbbbb
Tema ilustrado 9.2.docxbbbbbbbbbbbbbbbbbbbTema ilustrado 9.2.docxbbbbbbbbbbbbbbbbbbb
Tema ilustrado 9.2.docxbbbbbbbbbbbbbbbbbbbantoniolfdez2006
 
Auditoría de Sistemas de Gestión
Auditoría    de   Sistemas     de GestiónAuditoría    de   Sistemas     de Gestión
Auditoría de Sistemas de GestiónYanet Caldas
 
Trabajo practico N°14 - Despacho Economico de Cargas - Campus 2022.pdf
Trabajo practico N°14 - Despacho Economico de Cargas - Campus 2022.pdfTrabajo practico N°14 - Despacho Economico de Cargas - Campus 2022.pdf
Trabajo practico N°14 - Despacho Economico de Cargas - Campus 2022.pdfChristianMOntiveros1
 
Manual deresolucion de ecuaciones por fracciones parciales.pdf
Manual deresolucion de ecuaciones por fracciones parciales.pdfManual deresolucion de ecuaciones por fracciones parciales.pdf
Manual deresolucion de ecuaciones por fracciones parciales.pdfgonzalo195211
 
ingenieria grafica para la carrera de ingeniera .pptx
ingenieria grafica para la carrera de ingeniera .pptxingenieria grafica para la carrera de ingeniera .pptx
ingenieria grafica para la carrera de ingeniera .pptxjhorbycoralsanchez
 
SESION 11 SUPERVISOR SSOMA SEGURIDAD Y SALUD OCUPACIONAL
SESION 11 SUPERVISOR SSOMA SEGURIDAD Y SALUD OCUPACIONALSESION 11 SUPERVISOR SSOMA SEGURIDAD Y SALUD OCUPACIONAL
SESION 11 SUPERVISOR SSOMA SEGURIDAD Y SALUD OCUPACIONALEdwinC23
 
1. Equipos Primarios de una Subestaciones electricas
1. Equipos Primarios de una Subestaciones electricas1. Equipos Primarios de una Subestaciones electricas
1. Equipos Primarios de una Subestaciones electricasurAN077
 

Último (20)

G4 - CASO DE ESTUDIO - VOLUMEN DE UN RESERVORIO (1).pptx
G4 - CASO DE ESTUDIO - VOLUMEN DE UN RESERVORIO (1).pptxG4 - CASO DE ESTUDIO - VOLUMEN DE UN RESERVORIO (1).pptx
G4 - CASO DE ESTUDIO - VOLUMEN DE UN RESERVORIO (1).pptx
 
Cereales tecnología de los alimentos. Cereales
Cereales tecnología de los alimentos. CerealesCereales tecnología de los alimentos. Cereales
Cereales tecnología de los alimentos. Cereales
 
Aportes a la Arquitectura de Le Corbusier y Mies Van der Rohe
Aportes a la Arquitectura de Le Corbusier y Mies Van der RoheAportes a la Arquitectura de Le Corbusier y Mies Van der Rohe
Aportes a la Arquitectura de Le Corbusier y Mies Van der Rohe
 
CAPACITACIÓN EN AGUA Y SANEAMIENTO EN ZONAS RURALES
CAPACITACIÓN EN AGUA Y SANEAMIENTO EN ZONAS RURALESCAPACITACIÓN EN AGUA Y SANEAMIENTO EN ZONAS RURALES
CAPACITACIÓN EN AGUA Y SANEAMIENTO EN ZONAS RURALES
 
UC Fundamentos de tuberías en equipos de refrigeración m.pdf
UC Fundamentos de tuberías en equipos de refrigeración m.pdfUC Fundamentos de tuberías en equipos de refrigeración m.pdf
UC Fundamentos de tuberías en equipos de refrigeración m.pdf
 
Balance materia y energia procesos de Secado
Balance materia y energia procesos de SecadoBalance materia y energia procesos de Secado
Balance materia y energia procesos de Secado
 
TAIICHI OHNO, historia, obras, reconocimientos
TAIICHI OHNO, historia, obras, reconocimientosTAIICHI OHNO, historia, obras, reconocimientos
TAIICHI OHNO, historia, obras, reconocimientos
 
entropia y neguentropia en la teoria general de sistemas
entropia y neguentropia en la teoria general de sistemasentropia y neguentropia en la teoria general de sistemas
entropia y neguentropia en la teoria general de sistemas
 
Video sustentación GA2- 240201528-AA3-EV01.pptx
Video sustentación GA2- 240201528-AA3-EV01.pptxVideo sustentación GA2- 240201528-AA3-EV01.pptx
Video sustentación GA2- 240201528-AA3-EV01.pptx
 
GUIA DE SEGURIDAD PARA VENTILACION DE MINAS-POSITIVA.pdf
GUIA DE SEGURIDAD PARA VENTILACION DE MINAS-POSITIVA.pdfGUIA DE SEGURIDAD PARA VENTILACION DE MINAS-POSITIVA.pdf
GUIA DE SEGURIDAD PARA VENTILACION DE MINAS-POSITIVA.pdf
 
Tippens fisica 7eDIAPOSITIVAS TIPENS Tippens_fisica_7e_diapositivas_33.ppt
Tippens fisica 7eDIAPOSITIVAS TIPENS Tippens_fisica_7e_diapositivas_33.pptTippens fisica 7eDIAPOSITIVAS TIPENS Tippens_fisica_7e_diapositivas_33.ppt
Tippens fisica 7eDIAPOSITIVAS TIPENS Tippens_fisica_7e_diapositivas_33.ppt
 
ARMADURAS METODO NODOS.pptx......................
ARMADURAS METODO NODOS.pptx......................ARMADURAS METODO NODOS.pptx......................
ARMADURAS METODO NODOS.pptx......................
 
Tema ilustrado 9.2.docxbbbbbbbbbbbbbbbbbbb
Tema ilustrado 9.2.docxbbbbbbbbbbbbbbbbbbbTema ilustrado 9.2.docxbbbbbbbbbbbbbbbbbbb
Tema ilustrado 9.2.docxbbbbbbbbbbbbbbbbbbb
 
422382393-Curso-de-Tableros-Electricos.pptx
422382393-Curso-de-Tableros-Electricos.pptx422382393-Curso-de-Tableros-Electricos.pptx
422382393-Curso-de-Tableros-Electricos.pptx
 
Auditoría de Sistemas de Gestión
Auditoría    de   Sistemas     de GestiónAuditoría    de   Sistemas     de Gestión
Auditoría de Sistemas de Gestión
 
Trabajo practico N°14 - Despacho Economico de Cargas - Campus 2022.pdf
Trabajo practico N°14 - Despacho Economico de Cargas - Campus 2022.pdfTrabajo practico N°14 - Despacho Economico de Cargas - Campus 2022.pdf
Trabajo practico N°14 - Despacho Economico de Cargas - Campus 2022.pdf
 
Manual deresolucion de ecuaciones por fracciones parciales.pdf
Manual deresolucion de ecuaciones por fracciones parciales.pdfManual deresolucion de ecuaciones por fracciones parciales.pdf
Manual deresolucion de ecuaciones por fracciones parciales.pdf
 
ingenieria grafica para la carrera de ingeniera .pptx
ingenieria grafica para la carrera de ingeniera .pptxingenieria grafica para la carrera de ingeniera .pptx
ingenieria grafica para la carrera de ingeniera .pptx
 
SESION 11 SUPERVISOR SSOMA SEGURIDAD Y SALUD OCUPACIONAL
SESION 11 SUPERVISOR SSOMA SEGURIDAD Y SALUD OCUPACIONALSESION 11 SUPERVISOR SSOMA SEGURIDAD Y SALUD OCUPACIONAL
SESION 11 SUPERVISOR SSOMA SEGURIDAD Y SALUD OCUPACIONAL
 
1. Equipos Primarios de una Subestaciones electricas
1. Equipos Primarios de una Subestaciones electricas1. Equipos Primarios de una Subestaciones electricas
1. Equipos Primarios de una Subestaciones electricas
 

Persistencia avanzada de datos en Java. JPA

  • 1. Tecnologı́as SI. Capa de persistencia (II) Java Persistence API (JPA) – Ampliación MEI-SI, 2018 Octubre 2018
  • 2. Contenido Mapeo de la herencia en JPA Validaciones Bean Validation Consultas JPQL Criteria API TAREAS PARA PRÓXIMA SEMANA
  • 3. Mapeo de herencia en JPA I Posibilidad de mapeo de herencia entre entidades. I Superclase puede ser o no una entidad JPA I Superclase (abstracta o concreta) es una entidad JPA mapeada I Superclase no es entidad JPA, pero porta información de mapeo I superclase marcada con @MappedSuperclass I subclases son entidades JPA y reutilizan el mapeo indicado en la superclase I Superclase no entidad JPA I superclase ”normal” sin información de mapeo I JPA no maneja directamente esas información I Entidades JPA pueden ser extendidas con subclases no entidad
  • 4. Mapeo de herencia en JPA II Control de la herencia en JPA I Anotación @Inheritance(strategy=’...’) en la entidad superclase controla el modo de mapeo de la herencia I InheritanceType.SINGLE_TABLE: una única tabla común para superclase y subclase (con ”nulos”) I InheritanceType.TABLE_PER_CLASS: una tabla por subclase concreta (incluye los atributos heredados y los propios) I InheritanceType.JOINED: una tabla por clase, tanto superclase (atributos heredados) como subclase (atributos propios) I Control del mapeo de herencia con @DiscriminatorColumn (en superclase) y @DiscriminatorValue (en subclases) I Anotación @MappedSuperclass usada en superclases que no son entidades JPA (no mapeadas) I Usa una estrategia equivalente a TABLE_PER_CLASS I Posibilidad de incluir anotaciones de mapeo JPA en sus atributos (”heredadas” por sus subclases entidad)
  • 5. Mapeo de herencia en JPA III Ejemplos @Entity @Inheritance(strategy=[TipoEstrategia]) public abstract class Persona { @Id long id; String nombre; ... } @Entity public class Profesor extends Persona { @Enumerated TipoProfesor tipo; Double sueldo; @ManyToOne List<Materia> materias; ... } @Entity public class Alumno extends Persona { @ManyToOne List<Materia> materias; ... } [TipoEstrategia] SINGLE TABLE 1 tabla común con todos los atributos TABLE PER CLASS 2 tablas (Profesor, Alumno) JOINED 3 tablas (Persona, Profesor, Alumno) @MappedSuperclass public abstract class Persona { @Id long id; String nombre; ... } @Entity public class Profesor extends Persona { @Enumerated TipoProfesor tipo; Double sueldo; @ManyToOne List<Materia> materias; ... } @Entity public class Alumno extends Persona { @ManyToOne List<Materia> materias; ... } 2 tablas (Profesor, Alumno)
  • 6. Contenido Mapeo de la herencia en JPA Validaciones Bean Validation Consultas JPQL Criteria API TAREAS PARA PRÓXIMA SEMANA
  • 7. Validaciones Bean Validation Bean Validation ofrece un framework para definición de metadatos sobre objetos Java y para la validación de los mismos I Proporciona anotaciones para vincular restricciones sobre los atributos de objetos Java (incluyendo Entidades JPA) I Automatiza la validación de estas restricciones I Disponible en las diversas capas de la aplicación I En capa de persistencia para validar la corrección de las entidades JPA I En capa de presentación para validar las entradas de usuario I Permite la definición de anotaciones de validación personalizadas I Definido en JSR 303, ver https://beanvalidation.org/ I Implementación de referencia: Hibernate Validator URL: http://hibernate.org/validator/ <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <version>6.0.13.Final</version> </dependency> Aclaración: Las anotaciones Bean Validation son complementarias a las de los mapeos JPA (no las reemplazan). @Entity public class Entidad { @Column(length=10) @Size(max = 10) private String campo; ... } I @Column especifica detalles del mapeo JPA (afecta a la generación de código DDL de la correspondiente tabla) I @Size establece una restricción respecto al tamaño del atributo
  • 8. Anotaciones Bean Validation Vinculadas a la definición de atributos, métodos set() o parámetros de métodos @Min(v) Valor debe ser menor o igual que el indicado @Max(v) Valor debe ser menor o igual que el indicado @DecimalMax(v) Valor decimal debe ser menor o igual que el indicado @DecimalMin(v) Valor decimal debe ser mayor o igual que el indicado @Digit(integer=i, fraction=f) Longitud valor numérico debe coincidir con especificaciones @Future El valor de una fecha debe situarse en el futuro @Past El valor de una fecha debe situarse en el pasado @NotNull El valor no puede ser null @Null El valor debe ser null @NotBlank El valor de la cadena debe contener al menos un caracter no espacio @Pattern(regexp="p") El valor de la cadena debe coincidir con el patrón indicado @Size(min=i,max=x) El tamaño (de una cadena, de una colección, de un array) debe cumplir la restricción indicada @NotEmpty La (cadena, colección, array) no puede estar vacı́a @AssertTrue El valor debe ser true @AssertFalse El valor debe ser false Otras: @PastOrPresent, @ FutureOrPresent, @Positive,@Negative, @Email, ... Más detalles (Java EE 8 tutorial): https://javaee.github.io/tutorial/bean-validation002.html
  • 9. Validaciones definidas por usuario Posibilidad de definir validaciones propias I Aplicables sobre atributos (anotan definición de atributos) o sobre objetos completos (anotan las clases) I Supone definir: 1. Una anotación propia I que herede de @Document I que declare @Constraint(validatedBy=ClaseValidadora.class) 2. Una clase validadora I que implemente la interface ConstraintValidator<> I debe definir los métodos initialize() y isValid()
  • 10. Ejemplo Validación propia @Nif @Target({ METHOD, FIELD, ANNOTATION_TYPE }) @Retention(RUNTIME) @Constraint(validatedBy = NifValidator.class) @Documented public @interface Nif { String message() default "{constraint nif}"; Class<?>[] groups() default {}; Class<? extends Payload>[] payload() default {}; } @Entity public class Usuario { @Id @Nif private String nif; ... } public class NifValidator implements ConstraintValidator<Nif, String> { private String letters = "TRWAGMYFPDXBNJZSQVHLCKE"; private Pattern mask = Pattern.compile("[0-9]{8,8}[A-Z]"); @Override public void initialize(Nif constraintAnnotation) {} @Override public boolean isValid(String value, ConstraintValidatorContext context) { Matcher matcher = mask.matcher(value); if (!matcher.matches()){ return false; } String dni = value.substring(0,8); String control = value.substring(8,9); int position = Integer.parseInt(dni)%23; String controlCalculated = letters.substring(position,position+1); if (!control.equalsIgnoreCase(controlCalculated)){ return false; } return true; } }
  • 11. Contenido Mapeo de la herencia en JPA Validaciones Bean Validation Consultas JPQL Criteria API TAREAS PARA PRÓXIMA SEMANA
  • 12. Consultas JPQL I JPQL: Java Persistence Query Language I Ofrece sintaxis similar a la de SQL para realizar consultas sobre entidades JPA I Clausula FROM maneja nombres de Entidades (no tablas) I Hace uso de las relaciones mapeadas 1:N o N:M para definir los JOINs entre tablas relacionadas I Sintaxis: IN ó JOIN I No necesario con relaciones 1:1 o N:1 I Nombres de campos usan notación Java: Entidad.atributo I Los elementos manejados en WHERE o devueltos por SELECT son siempre objetos I Se permiten consultas de tipo SELECT, UPDATE y DELETE
  • 13. Consultas JPQL II Consultas (objetos de tipo Query ó TypedQuery desde JPA 2.1) son creadas por el EM Query createQuery(String query) : crea una consulta JPQL Query createNamedQuery(String namedQuery) : crea una consulta nombrada, vinculada a una Entidad y definida con la anotación @NamedQuery(name="...", queryString="...") Query createNativeQuery(String query) : crea una consulta SQL Nota: Para la creación de TypedQuery la sintaxis es la misma, añadiendo el tipo de la clase que devolverá la consulta (evita un cast explı́cito). TypedQuery<Articulos> query = em.createQuery("SELECT a FROM Articulo a", Articulo.class);
  • 14. Consultas JPQL III Ejecución de consultas Object getSingleResult() : devuelve un objeto con el resultado único de la consulta I Devuelve un array (Object[]) cuando SELECT especifica varios valores List getResultList() : devuelve una colección List con los resultados de la consulta I Se puede especificar el rango de valores a devolver (útil para paginar resultados) I Query setFirstResult(int): inicio del rango I Query setMaxResults(int): tamaño del rango int executeUpdate() : ejecución de Querys de tipo UPDATE o DELETE Nota: Con TypedQuery los valores devueltos (simple o lista) estan tipados según se indicara en la creación de la TypedQuery.
  • 15. Consultas JPQL IV Consultas parametrizadas I Notación: :nombre (paramétros con nombre) ?3 (parámetros posicionales) I Métodos de la clase Query Query setParameter(String s, Object o) : asocia valor a un parámetro nombrado Query setParameter(int pos, Object o) : asocia valor a un parámetro posicional Ejemplos: I Lista de artı́culos cuya descripción empiece por CPU, ”paginados” de 10 en 10 TypeQueryArticulo q1 = em.createQuery(SELECT a FROM Articulo a + WHERE a.descripcion LIKE CPU% , Articulo.class); ListArticulo lista; int i = 0; do { q1.setFirstResult(i); q1.setMaxResult(10); lista = q1.getResultList(); i = i + 10; ... } while (lista !=null);
  • 16. Consultas JPQL V I Lista de pares (Pedido, importe total pedido) entre 2 fechas Query q2 = em.createQuery(SELECT p, SUM(l.cantidad * l.articulo.precio)+ FROM Pedido p JOIN p.lineas+ WHERE p.fecha BETWEEN :fechaIni AND :fechaFin+ GROUP BY p.numPedido); q2.setParameter(fechaIni, new Date(.....)); q2.setParameter(fechaFin, new Date(.....)); Iterator pares = q2.getResultList().iterator(); for(Object[] par: pares) { pedido = (Pedido) par[0]; total = (Float) par[1]; ... }
  • 17. Contenido Mapeo de la herencia en JPA Validaciones Bean Validation Consultas JPQL Criteria API TAREAS PARA PRÓXIMA SEMANA