Programación Avanzada
Tema: Relaciones y JSQL
Contenido
Objetivo
Crear las relaciones de las ● Relaciones
entidades y consultas de las ● JSQL
mismas
● Relaciones entre Entidades
Programación Avanzada/ JPA Relaciones
Conceptos fundamentales
Antes de comenzar y para entender bien las diferentes relaciones entre entidades debemos tener claro los siguientes
conceptos.
• Rol: Define cual de las entidades de la relación es origen y cuál es la entidad destino.
• Dirección: Define si la relación entre dos entidades es unidireccional o bidireccional. Es decir, si existe la relación en
ambos sentidos o solamente en uno de ellos y en este segundo caso identifica a la entidad origen y destino.
• Cardinalidad: Indica la cantidad de entidades que existen en cada lado de la relación. Puede ser uno o muchos
• Ordinalidad: Indica si un atributo es obligatorio o opcional
• Columnas de Unión: En términos de base de datos una relación entre dos tablas significa que una tabla referencia
a otra tabla. Una columna que referencia a una clave primaria de otra tabla se denomina “clave externa”. En JPA
estas columnas las llamamos “columnas de unión” y la anotación @JoinColum es utilizada para configurar este tipo
de columnas
Programación Avanzada/ JPA Relaciones
Definiciones
Las relaciones que utiliza JPA son las mismas que existen el Base de Datos para modelos relacionales,
estas son
• Uno a Uno
• Uno a Varios
• Varios a Varios
Relaciones Individuales:
Son aquellas en las que la entidad destino de la relación es única. Es decir “Varios a Uno” o “Uno a Uno”
En Java y JPA, todas las relaciones son unidireccionales, ya que un objeto origen referencia a
otro objeto no quiere decir que a la inversa se produzca lo mismo; en cambio, en el mundo de las
bases de datos son bidireccionales
Programación Avanzada/ JPA Relaciones
Modelo Entidad-Relación
Programación Avanzada/ JPA Relaciones
Relación de Uno-Uno
Se usa la anotación @JoinColumn para especificar cual es el campo de la tabla que actúa de
clave foránea o clave foránea compuesta, respectivamente
Si la relación es bidireccional y la entidad que contiene la clase integrable está en el lado
propietario de la relación, el lado no propietario debe usar el elemento mappedBy de la anotación
OneToOne para especificar el campo de la relación o la propiedad de la clase integrable
Programación Avanzada/ JPA Relaciones
Relación de Uno - Varios
Empleado
Factura
Para esta relación se considera utilizar le
Fetch del Tipo Lazy
Programación Avanzada/ JPA Relaciones
Relación de Uno-Varios
Factura
Cliente
Programación Avanzada/ JPA Relaciones
Relación de Uno-Varios
● JPA Query
Programación Avanzada/ Querys
Modelo BD
Contra una base de datos podemos ejecutar diferentes tipos de sentencias, desde una simple consulta,
pasando por inserciones masivas, hasta una sentencia que aumente los permisos de un grupo de
usuarios.
Programación Avanzada/ Querys
JpaRepository
Programación Avanzada/ Querys
JpaRepository
Programación Avanzada/ Querys
JpaRepository
• CrudRepository proporciona
principalmente funciones CRUD.
• PagingAndSortingRepository proporciona
métodos para hacer paginación y
clasificación de registros.
• JpaRepository proporciona algunos
métodos relacionados con JPA, como
limpiar el contexto de persistencia y eliminar
registros en un lote.
Programación Avanzada/ Querys
JPQL
JPQL ( Lenguaje de consulta de persistencia de Java ) es un poderoso lenguaje de consulta que le
permite definir consultas de bases de datos basadas en su modelo de entidad. Su estructura y sintaxis son
muy similares a SQL. Pero hay una diferencia importante que señalar antes de guiarlo a través de las
diferentes partes de una consulta JPQL.
Algunas de sus características incluyen
• Es un lenguaje de consulta independiente de la plataforma.
• Es simple y robusto.
• Se puede utilizar con cualquier tipo de base de datos de relaciones.
• Se puede declarar estáticamente en metadatos o también se puede construir
dinámicamente en el código.
• Es insensible a mayúsculas y minúsculas.
Programación Avanzada/ Querys
Estructura de consulta JPQL
La sintaxis de JPQL es muy similar a la de SQL. Dado que la mayoría de los desarrolladores ya están
familiarizados con la sintaxis de SQL, se vuelve fácil de aprender y usar JPQL.
SELECTLas estructuras de JPQL's UPDATEy DELETEconsultas son:
Programación Avanzada/ Querys
La anotación @Query
La anotación @Query solo se puede usar para anotar métodos de interfaz de repositorio. La llamada de
los métodos anotados activará la ejecución de la declaración que se encuentra en él, y su uso es bastante
sencillo.
@Query es compatible con SQL nativo y JPQL.
• Cuando se usa SQL nativo, el parámetro nativeQuery de la anotación debe establecerse en true
Programación Avanzada/ Querys
La anotación @Query
Para seleccionar todos los clientes de una base de datos, podemos usar una consulta nativa o JPQL
Programación Avanzada/ Querys
Parámetros del método de referencia
Tanto las consultas nativas como las consultas JPQL en la anotación @Query pueden aceptar
parámetros de anotaciones en método, que se clasifican además en
• Parámetros basados en posición
• Parámetros con nombre
Cuando utilice parámetros basados en la posición , debe realizar un seguimiento del orden en que
proporciona los parámetros en:
El primer parámetro pasado al método se asigna a ?1, el segundo se asigna a ?2, etc. Si los cambia
accidentalmente, su consulta probablemente generará una excepción o producirá resultados
incorrectos de manera silenciosa.
Programación Avanzada/ Querys
Parámetros del método de referencia
Los parámetros con nombre son, como se indica pueden ser referenciados con nombre, sin importar su
posición
El nombre dentro de la anotación @Param coincide con los parámetros nombrados en la anotación
@Query ,por lo que puede llamar a sus variables como desee, pero por motivos de coherencia, se
recomienda utilizar el mismo nombre.
https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query.spel-expressions
Gracias
Responsabilidad con pensamiento positivo