SlideShare una empresa de Scribd logo
1 de 40
Descargar para leer sin conexión
Hibernate / JPA @luce3
¿Qué deberíamos saber?
•

Relaciones simples @OneToMany y @ManyToOne

•

Cascades

•

Tipos de fetching
¿Qué vamos a ver?
•

Dudas?

•

El código está en github.
¿Qué vamos a ver?
•

Propietarios de la relación

•

Entender la sesión...
Propietarios de la
relación
Propietarios
•
•

Relaciones unidireccionales:
o Un usuario tiene un rol, pero no al revés.
Relación bidireccional:
o Un usuario tiene un conjunto de solicitudes y cada solicitud tiene
asociado ese mismo usuario.
Propietarios
•

Propietario: es el responsable de la actualización/inserción de la relación.
o Ejemplo: una solicitud tiene asociado unos datos económicos. Cuando
inserto la solicitud quiero que se inserten sus datos económicos.
 El responsable de la relación es la solicitud.
o Sólo puede haber un responsable de una relación.
Propietarios
•
•

En las relaciones unidireccionales:
o El responsable es el lado que tiene el mapping (mapeo).
En las relaciones bidireccionales:
o HAY que especificar el responsable de la relación.
Propietarios
•

@OneToMany... hemos visto:
o Unidireccional
o Unidireccional con join table
o Bidireccional?
Propietarios
•

Bidireccional. Lado propietario en el @ManyToOne
o (recomendado!)
o De esta forma:
 Usuario: @OneToMany (mappedBy="usuarioEJEMPLO")
 Solicitud: @ManyToOne @JoinColumn("nombre de la columna")
private Usuario usuarioEJEMPLO;
Propietarios
•

Probadlo!
o La solicitud tiene un atributo Usuario con un @ManyToOne

o El usuario tiene una propiedad mappedBy dentro del @OneToMany que
apunta al NOMBRE del atributo usuario en la solicitud.
Propietarios
•

En el otro lado:
o Lado del One: JoinColumn con name="lo_que_sea", insertable = false,
updatable = false;
o Lado del Many: JoinColumn con name="lo_que_sea".

•

Probadlo!
o Usuario apuntando a una set de solicitudes con @OneToMany SIN
mappedBy
o Solicitud apuntando a un Usuario con @ManyToOne y propiedades
insertable=false, updatable=false (hay varios @JoinColumn pero uno no
es insertable).
Propietarios
•

¿Qué pegas véis?
o ...
Propietarios
•
•

Ligeramente más ineficiente, ojo con Envers (auditoría)
o Insert y luego un update (por PK).
La foreign key no puede tener NOT NULL.
Propietarios
•
•

Sólo, sólo, sólo puede haber un sitio en el que se mapean físicamente las
columnas para ser insertadas (sólo un @JoinColumn con insertable=true,
updatable=true)
Por favor, haced las operaciones en los dos lados.
o Si añado una solicitud a un usuario, también llamo a el setUsuario de
solicitud.
o Si llamo a setUsuario de solicitud también añado la solicitud a la lista de
solicitudes de usuario.
Propietarios
•
•
•

Poner mal el propietario de la relación introduce errores sutiles...
He creado un ejemplo para verlo con Historial, que tiene una lista de
expedientes y Expediente que tiene un Historial.
El responsable debería ser Historial, pero nos hemos colado...
Propietarios
•

Regla de Oro para relaciones bidireccionales en relación padre-hijos:
o Si la entidad importante es el padre -> insertable = false, updatable =
false en el HIJO
o Si la entidad importante es el hijo -> mappedBy en el PADRE
Listas
Listas
•
•

Sets? y listas?
Una lista tiene ORDEN, si no tiene orden es un "Bag"
o Un conjunto de elementos sin orden/sin indexar
o Elementos repetidos: viola el principio de unicidad de tuplas del modelo
relacional
o Cannot simultaneously fetch multiple bags -> sólo se puede recuperar a
Eager una sola bag.
o Envers no lo soporta.
Listas
•
•
•

S1 Euro
S1 Euro
S1 Paseo Zorrilla

S1 -> 3 direcciones (Euro, Euro, Paseo Zorrilla) 1 única bolsa
S1
S1
S1

1 Euro
2 Euro
P Zorrilla

Portal 1
Portal 2
Portal 3
Listas
•
•
•

Y funciona? Poner un List?
o Sí. Pero no lo hagáis si podéis evitarlo.
Si tenemos orden, lo mapeamos con @OrderColumn (hibernate no te crea la
columna automáticamente)
Si no tenemos orden, mapeamos un Set.
o Si necesitamos una lista, creamos un método que devuelva una lista a
partir del Set.
o Las operaciones de persistencia las hacemos sobre el Set.
Listas
•

Caso de prueba:
o Mapead una relación bidireccional entre solicitud y datos bancarios
(pueden ser varios para una solicitud) (me da igual que propietario
mientras lo entendais).
o Guardad varios datos bancarios.
Listas
•
•
•

Hibernate comprueba si las colecciones han cambiado, por identidad de Java
(el resto de cosas por valor).
Le obliga a guardar toda la colección, no sabe que no han cambiado los
componentes.
Llamad a add(), addAll() y remove() cuando queráis interaccionar con
elementos de una lista.
Listas
•

No hagáis estas cosas (con names anotado):

public void setNames(List namesList) {
names = (String[]) namesList.toArray();
}
public List getNames() {
return Arrays.asList(names);
}
Listas
•

O no hagáis esto para incluir nuevos elementos o borrar:

names = NUEVA LISTA
Relaciones avanzadas
Relaciones avanzadas
•
•
•

ManyToMany
o Unidireccional
o Bidireccional: mappedBy
Excesivamente compleja, mejor evitarla o mapearla como dos relaciones
(@OneToMany y @ManyToOne).
Si no existen las tablas, mejor, porque genera el esquema correcto.
Relaciones avanzadas
•
•

La relación consiste en un nombre específico para la tabla de unión:
o joinTable (name)
y los nombres de las columnas de unión:
o joinColumns e inverseJoinColumns.
Relaciones avanzadas
•

@CollectionOfElements, una lista de valores simpres
o @ElementCollection
o @CollectionTable(name="___", joinColumns=@JoinColumn(name="__"))
Relaciones avanzadas
•
•

@OneToOne
o foreign key o tabla
o compartiendo primary key
Mapas
o @MapKey(name="number")
Relaciones avanzadas
•

Las relaciones es la parte más complicada (IMHO) de Hibernate:
o Tirar de referencia
Más mapeos
Más mapeos de columnas
•
•

@Formula
o Para incluir SQL directamente en un mapeo.
o También subselects
o Pruebalo!
@Temporal(...)
o Para mapear el caos de tipos de fechas diferentes dependiendo de la BD.
o Pruebalo!
Más mapeos de columnas
•
•
•

@Enumerated
o Para mapear una enumeración
@Sort/@Where
o Ordenación y restricciones por defecto!
@Lob
o Para mapear un lob/clob...
Tipos
Tipos
•

Detrás de los mapeos hay tipos de Hibernate:
o Valores (org.hibernate.type.StringType)
o Compuestos (les veremos mañana...)
o Colecciones
o Custom (los que yo defina)
FAQ
FAQ
•
•

...
¿Dudas?
Hibernate / JPA

Más contenido relacionado

Destacado

Hibernate - JPA @luce 5
Hibernate - JPA @luce 5Hibernate - JPA @luce 5
Hibernate - JPA @luce 5Javier Gamarra
 
Taller de Arduino en Cylicon Valley - Semana 2
Taller de Arduino en Cylicon Valley - Semana 2Taller de Arduino en Cylicon Valley - Semana 2
Taller de Arduino en Cylicon Valley - Semana 2Roberto Santana Valdés
 
Curso Arduino Nivel 3: Mueve cosas con Arduino. Tenerife Maker Space
Curso Arduino Nivel 3: Mueve cosas con Arduino. Tenerife Maker SpaceCurso Arduino Nivel 3: Mueve cosas con Arduino. Tenerife Maker Space
Curso Arduino Nivel 3: Mueve cosas con Arduino. Tenerife Maker SpaceTenerife Maker Space
 
Modos de servicio_para_tv_chinos (1)
Modos de servicio_para_tv_chinos (1)Modos de servicio_para_tv_chinos (1)
Modos de servicio_para_tv_chinos (1)EDITH LLERENA
 
Arduino - Tercera sesión
Arduino - Tercera sesiónArduino - Tercera sesión
Arduino - Tercera sesiónJavier Gamarra
 
5 meses de juegos ágiles
5 meses de juegos ágiles5 meses de juegos ágiles
5 meses de juegos ágilesJavier Gamarra
 
Performance myths in android
Performance myths in androidPerformance myths in android
Performance myths in androidJavier Gamarra
 
Taller de Arduino básico. Tenerife Maker Space. Nivel 2
Taller de Arduino básico. Tenerife Maker Space. Nivel 2Taller de Arduino básico. Tenerife Maker Space. Nivel 2
Taller de Arduino básico. Tenerife Maker Space. Nivel 2Tenerife Maker Space
 
Actividades de-lectoescritura-05
Actividades de-lectoescritura-05Actividades de-lectoescritura-05
Actividades de-lectoescritura-05EDITH LLERENA
 
Introducción a Arduino. Tenerife Maker Space. Nivel 1
Introducción a Arduino. Tenerife Maker Space. Nivel 1Introducción a Arduino. Tenerife Maker Space. Nivel 1
Introducción a Arduino. Tenerife Maker Space. Nivel 1Tenerife Maker Space
 
Cuestionario, checklist, inspecccion, entrevista
Cuestionario, checklist, inspecccion, entrevistaCuestionario, checklist, inspecccion, entrevista
Cuestionario, checklist, inspecccion, entrevistaHildaMarroquin91
 
Cambiar una empresa con juegos ágiles
Cambiar una empresa con juegos ágilesCambiar una empresa con juegos ágiles
Cambiar una empresa con juegos ágilesJavier Gamarra
 
Tema2.componenteselectrónicos%28 alumnos%29
Tema2.componenteselectrónicos%28 alumnos%29Tema2.componenteselectrónicos%28 alumnos%29
Tema2.componenteselectrónicos%28 alumnos%29EDITH LLERENA
 
Bachillerato Internacional, formación para líderes del futuro
Bachillerato Internacional, formación para líderes del futuroBachillerato Internacional, formación para líderes del futuro
Bachillerato Internacional, formación para líderes del futuroASECCBI
 

Destacado (20)

CAS 2013
CAS 2013CAS 2013
CAS 2013
 
Hibernate - JPA @luce 5
Hibernate - JPA @luce 5Hibernate - JPA @luce 5
Hibernate - JPA @luce 5
 
Problemas Propuestos Condicionales Compuestos
Problemas Propuestos Condicionales CompuestosProblemas Propuestos Condicionales Compuestos
Problemas Propuestos Condicionales Compuestos
 
Opinionated android
Opinionated androidOpinionated android
Opinionated android
 
Taller de Arduino en Cylicon Valley - Semana 2
Taller de Arduino en Cylicon Valley - Semana 2Taller de Arduino en Cylicon Valley - Semana 2
Taller de Arduino en Cylicon Valley - Semana 2
 
Curso Arduino Nivel 3: Mueve cosas con Arduino. Tenerife Maker Space
Curso Arduino Nivel 3: Mueve cosas con Arduino. Tenerife Maker SpaceCurso Arduino Nivel 3: Mueve cosas con Arduino. Tenerife Maker Space
Curso Arduino Nivel 3: Mueve cosas con Arduino. Tenerife Maker Space
 
Modos de servicio_para_tv_chinos (1)
Modos de servicio_para_tv_chinos (1)Modos de servicio_para_tv_chinos (1)
Modos de servicio_para_tv_chinos (1)
 
Arduino - Tercera sesión
Arduino - Tercera sesiónArduino - Tercera sesión
Arduino - Tercera sesión
 
5 meses de juegos ágiles
5 meses de juegos ágiles5 meses de juegos ágiles
5 meses de juegos ágiles
 
Performance myths in android
Performance myths in androidPerformance myths in android
Performance myths in android
 
Taller de Arduino básico. Tenerife Maker Space. Nivel 2
Taller de Arduino básico. Tenerife Maker Space. Nivel 2Taller de Arduino básico. Tenerife Maker Space. Nivel 2
Taller de Arduino básico. Tenerife Maker Space. Nivel 2
 
RxJava in practice
RxJava in practice RxJava in practice
RxJava in practice
 
Actividades de-lectoescritura-05
Actividades de-lectoescritura-05Actividades de-lectoescritura-05
Actividades de-lectoescritura-05
 
Introducción a Arduino (TLP2014)
Introducción a Arduino (TLP2014)Introducción a Arduino (TLP2014)
Introducción a Arduino (TLP2014)
 
BlueWeekend iOT
BlueWeekend iOTBlueWeekend iOT
BlueWeekend iOT
 
Introducción a Arduino. Tenerife Maker Space. Nivel 1
Introducción a Arduino. Tenerife Maker Space. Nivel 1Introducción a Arduino. Tenerife Maker Space. Nivel 1
Introducción a Arduino. Tenerife Maker Space. Nivel 1
 
Cuestionario, checklist, inspecccion, entrevista
Cuestionario, checklist, inspecccion, entrevistaCuestionario, checklist, inspecccion, entrevista
Cuestionario, checklist, inspecccion, entrevista
 
Cambiar una empresa con juegos ágiles
Cambiar una empresa con juegos ágilesCambiar una empresa con juegos ágiles
Cambiar una empresa con juegos ágiles
 
Tema2.componenteselectrónicos%28 alumnos%29
Tema2.componenteselectrónicos%28 alumnos%29Tema2.componenteselectrónicos%28 alumnos%29
Tema2.componenteselectrónicos%28 alumnos%29
 
Bachillerato Internacional, formación para líderes del futuro
Bachillerato Internacional, formación para líderes del futuroBachillerato Internacional, formación para líderes del futuro
Bachillerato Internacional, formación para líderes del futuro
 

Último

CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIAWilbisVega
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024GiovanniJavierHidalg
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxpabonheidy28
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesFundación YOD YOD
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdfIsabellaMontaomurill
 
Hernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxHernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxJOSEMANUELHERNANDEZH11
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafiosFundación YOD YOD
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudianteAndreaHuertas24
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 

Último (16)

CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docx
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento Protégeles
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdf
 
Hernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxHernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptx
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafios
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 

Hibernate - JPA @luce 3

  • 2. ¿Qué deberíamos saber? • Relaciones simples @OneToMany y @ManyToOne • Cascades • Tipos de fetching
  • 3. ¿Qué vamos a ver? • Dudas? • El código está en github.
  • 4. ¿Qué vamos a ver? • Propietarios de la relación • Entender la sesión...
  • 6. Propietarios • • Relaciones unidireccionales: o Un usuario tiene un rol, pero no al revés. Relación bidireccional: o Un usuario tiene un conjunto de solicitudes y cada solicitud tiene asociado ese mismo usuario.
  • 7. Propietarios • Propietario: es el responsable de la actualización/inserción de la relación. o Ejemplo: una solicitud tiene asociado unos datos económicos. Cuando inserto la solicitud quiero que se inserten sus datos económicos.  El responsable de la relación es la solicitud. o Sólo puede haber un responsable de una relación.
  • 8. Propietarios • • En las relaciones unidireccionales: o El responsable es el lado que tiene el mapping (mapeo). En las relaciones bidireccionales: o HAY que especificar el responsable de la relación.
  • 9. Propietarios • @OneToMany... hemos visto: o Unidireccional o Unidireccional con join table o Bidireccional?
  • 10. Propietarios • Bidireccional. Lado propietario en el @ManyToOne o (recomendado!) o De esta forma:  Usuario: @OneToMany (mappedBy="usuarioEJEMPLO")  Solicitud: @ManyToOne @JoinColumn("nombre de la columna") private Usuario usuarioEJEMPLO;
  • 11. Propietarios • Probadlo! o La solicitud tiene un atributo Usuario con un @ManyToOne o El usuario tiene una propiedad mappedBy dentro del @OneToMany que apunta al NOMBRE del atributo usuario en la solicitud.
  • 12. Propietarios • En el otro lado: o Lado del One: JoinColumn con name="lo_que_sea", insertable = false, updatable = false; o Lado del Many: JoinColumn con name="lo_que_sea". • Probadlo! o Usuario apuntando a una set de solicitudes con @OneToMany SIN mappedBy o Solicitud apuntando a un Usuario con @ManyToOne y propiedades insertable=false, updatable=false (hay varios @JoinColumn pero uno no es insertable).
  • 14. Propietarios • • Ligeramente más ineficiente, ojo con Envers (auditoría) o Insert y luego un update (por PK). La foreign key no puede tener NOT NULL.
  • 15. Propietarios • • Sólo, sólo, sólo puede haber un sitio en el que se mapean físicamente las columnas para ser insertadas (sólo un @JoinColumn con insertable=true, updatable=true) Por favor, haced las operaciones en los dos lados. o Si añado una solicitud a un usuario, también llamo a el setUsuario de solicitud. o Si llamo a setUsuario de solicitud también añado la solicitud a la lista de solicitudes de usuario.
  • 16. Propietarios • • • Poner mal el propietario de la relación introduce errores sutiles... He creado un ejemplo para verlo con Historial, que tiene una lista de expedientes y Expediente que tiene un Historial. El responsable debería ser Historial, pero nos hemos colado...
  • 17. Propietarios • Regla de Oro para relaciones bidireccionales en relación padre-hijos: o Si la entidad importante es el padre -> insertable = false, updatable = false en el HIJO o Si la entidad importante es el hijo -> mappedBy en el PADRE
  • 19. Listas • • Sets? y listas? Una lista tiene ORDEN, si no tiene orden es un "Bag" o Un conjunto de elementos sin orden/sin indexar o Elementos repetidos: viola el principio de unicidad de tuplas del modelo relacional o Cannot simultaneously fetch multiple bags -> sólo se puede recuperar a Eager una sola bag. o Envers no lo soporta.
  • 20. Listas • • • S1 Euro S1 Euro S1 Paseo Zorrilla S1 -> 3 direcciones (Euro, Euro, Paseo Zorrilla) 1 única bolsa S1 S1 S1 1 Euro 2 Euro P Zorrilla Portal 1 Portal 2 Portal 3
  • 21. Listas • • • Y funciona? Poner un List? o Sí. Pero no lo hagáis si podéis evitarlo. Si tenemos orden, lo mapeamos con @OrderColumn (hibernate no te crea la columna automáticamente) Si no tenemos orden, mapeamos un Set. o Si necesitamos una lista, creamos un método que devuelva una lista a partir del Set. o Las operaciones de persistencia las hacemos sobre el Set.
  • 22. Listas • Caso de prueba: o Mapead una relación bidireccional entre solicitud y datos bancarios (pueden ser varios para una solicitud) (me da igual que propietario mientras lo entendais). o Guardad varios datos bancarios.
  • 23. Listas • • • Hibernate comprueba si las colecciones han cambiado, por identidad de Java (el resto de cosas por valor). Le obliga a guardar toda la colección, no sabe que no han cambiado los componentes. Llamad a add(), addAll() y remove() cuando queráis interaccionar con elementos de una lista.
  • 24. Listas • No hagáis estas cosas (con names anotado): public void setNames(List namesList) { names = (String[]) namesList.toArray(); } public List getNames() { return Arrays.asList(names); }
  • 25. Listas • O no hagáis esto para incluir nuevos elementos o borrar: names = NUEVA LISTA
  • 27. Relaciones avanzadas • • • ManyToMany o Unidireccional o Bidireccional: mappedBy Excesivamente compleja, mejor evitarla o mapearla como dos relaciones (@OneToMany y @ManyToOne). Si no existen las tablas, mejor, porque genera el esquema correcto.
  • 28. Relaciones avanzadas • • La relación consiste en un nombre específico para la tabla de unión: o joinTable (name) y los nombres de las columnas de unión: o joinColumns e inverseJoinColumns.
  • 29. Relaciones avanzadas • @CollectionOfElements, una lista de valores simpres o @ElementCollection o @CollectionTable(name="___", joinColumns=@JoinColumn(name="__"))
  • 30. Relaciones avanzadas • • @OneToOne o foreign key o tabla o compartiendo primary key Mapas o @MapKey(name="number")
  • 31. Relaciones avanzadas • Las relaciones es la parte más complicada (IMHO) de Hibernate: o Tirar de referencia
  • 33. Más mapeos de columnas • • @Formula o Para incluir SQL directamente en un mapeo. o También subselects o Pruebalo! @Temporal(...) o Para mapear el caos de tipos de fechas diferentes dependiendo de la BD. o Pruebalo!
  • 34. Más mapeos de columnas • • • @Enumerated o Para mapear una enumeración @Sort/@Where o Ordenación y restricciones por defecto! @Lob o Para mapear un lob/clob...
  • 35. Tipos
  • 36. Tipos • Detrás de los mapeos hay tipos de Hibernate: o Valores (org.hibernate.type.StringType) o Compuestos (les veremos mañana...) o Colecciones o Custom (los que yo defina)
  • 37. FAQ