4. Mapeo de Clases
-
Upload
cristhian-dante-munoz-gutierrez -
Category
Documents
-
view
226 -
download
0
Transcript of 4. Mapeo de Clases
-
7/31/2019 4. Mapeo de Clases
1/102
Mapeo de clases
Sistemas de persistencia deobjetos
-
7/31/2019 4. Mapeo de Clases
2/102
Entidades
Un entidad representa un concepto deldominio
entidades Su ciclo de vida es independiente Debe tener una clave primaria
nov-08 [email protected] 2
-
7/31/2019 4. Mapeo de Clases
3/102
Value Types
Representan informacin adicional, noconceptos principales de dominio
una entidad o como composiciones(UML)
Su ciclo de vida depende enteramentede la entidad que las posee No pueden tener referencias entrantesnov-08 [email protected] 3
-
7/31/2019 4. Mapeo de Clases
4/102
VT, no referencias entrantes
nov-08 [email protected] 4
No es posible
-
7/31/2019 4. Mapeo de Clases
5/102
Representacin UML de VT
nov-08 [email protected] 5
equivalentes
-
7/31/2019 4. Mapeo de Clases
6/102
Representacin en Java
nov-08 [email protected] 6
-
7/31/2019 4. Mapeo de Clases
7/102
Paso de Value Types
Siempre por copia En java por defecto se pasan referencias
Cuidado con los getters
Alternativa: inmutables Las clases bsicas del JDK
String, Integer, Long, Double, etc
nov-08 [email protected] 7
-
7/31/2019 4. Mapeo de Clases
8/102
Cuidado en getters
nov-08 [email protected] 8
Peligro!!!
Peligro!!!
Seguro, String es inmutable
-
7/31/2019 4. Mapeo de Clases
9/102
Getters pueden romperencapsulacin
nov-08 [email protected] 9
-
7/31/2019 4. Mapeo de Clases
10/102
POJO (plain old java objects)
Las clases que necesitan ser persistentes sonclases java planas (java beans) Tienen que respetar un mnimo convenio de
nov-08 [email protected] 10
Setters/getters, constructor sin parmetros, etc.
La informacin necesaria para persistencia seaade en forma de metadatos Hibernate nativo xml, hibernate annotations JPA annotations, xml
-
7/31/2019 4. Mapeo de Clases
11/102
POJO Ejemplo (entidad)
nov-08 [email protected] 11
-
7/31/2019 4. Mapeo de Clases
12/102
POJO Ejemplo (entidad)
nov-08 [email protected] 12
-
7/31/2019 4. Mapeo de Clases
13/102
POJO Ejemplo (Value Object)
Ti o de acceso field
No lleva @IdNo lleva @Id
nov-08 [email protected] 13
property) igual al de laclase que lo incluye
-
7/31/2019 4. Mapeo de Clases
14/102
POJOs JPA
Constructor sin parmetros obligatorio Identificador Preferiblemente no tipos bsicos (int, long, etc.), mejor tipos
nullables (Integer, Long, etc.)
nov-08 [email protected] 14
Se correspondern con la clave primaria de la tabla
Getters y Setters (get/set/is) para cada atributo pueden ser privados JPA puede usar los setters al cargar un objeto para ajustar
sus atributos Colecciones para asociaciones many
Puede ser Set, List, Map o Collection Setters y getters pueden ser privados
-
7/31/2019 4. Mapeo de Clases
15/102
Persistencia de campos en JPA
Todos tipos JDK tienen persistenciaautomtica Campos de otro tipo:
@Embeddable todos los campos a la mismatabla
Referencias a Entidades: son relaciones, nocampos. FK a la tabla de @Entity
Resto de casos, serializacin Debe implementar Serializable
nov-08 [email protected] 15
-
7/31/2019 4. Mapeo de Clases
16/102
Metadatos en annotations
@Entity entidades @Embeddable Value Types
nov-08 [email protected] 16
de acceso del motor de persistencia alos atributosAcceso field (public, private, protected, package)Acceso properties (a travs de get/set)
getters y setters public o protected
-
7/31/2019 4. Mapeo de Clases
17/102
Metadatos en XML
En fichero orm.xml En persistence.xml
persistence.xml
XML revoca las indicaciones de
Annotations En deploy pueden se pueden ajustar
rendimientos sin tocar cdigo fuente
nov-08 [email protected] 17
-
7/31/2019 4. Mapeo de Clases
18/102
Metadatos xml, ejemplo
nov-08 [email protected] 18
-
7/31/2019 4. Mapeo de Clases
19/102
Categoras de anotaciones
Entity Database Schema
Inheritance Locking
Direct Mappings Relationship
mappins Composition
Entity Manager Queries
nov-08 [email protected] 19
-
7/31/2019 4. Mapeo de Clases
20/102
Anotaciones por categora
nov-08 [email protected] 20
-
7/31/2019 4. Mapeo de Clases
21/102
Anotaciones por categora
nov-08 [email protected] 21
-
7/31/2019 4. Mapeo de Clases
22/102
Mapeo de clases
nov-08 [email protected] 22
-
7/31/2019 4. Mapeo de Clases
23/102
@Entity Marca una clase como entidad
Entidades
nov-08 [email protected] 23
en las queries @Table
-
7/31/2019 4. Mapeo de Clases
24/102
@Colum
Condiciona la generacin de DDL Por defecto (sin @Column) cada
mismo nombre
nov-08 [email protected] 24
-
7/31/2019 4. Mapeo de Clases
25/102
tribu
tos
nov-08 [email protected] 25@
Colu
mn,a
-
7/31/2019 4. Mapeo de Clases
26/102
Marca una clase como ValueType Se pueden configurar las propiedades
@Embeddable
@Basic, @Column, @Lob, @Temporal,
@Enumerated
nov-08 [email protected] 26
-
7/31/2019 4. Mapeo de Clases
27/102
@Basic
Aplicable a:
nov-08 [email protected] 27
-
7/31/2019 4. Mapeo de Clases
28/102
@Enumerated
Cmo se salvan los valores enumerados EnumType.ORDINAL
nov-08 [email protected] 28
.
En BDD se crear uncampo tipo INTEGER o
VARCHAR
-
7/31/2019 4. Mapeo de Clases
29/102
-
7/31/2019 4. Mapeo de Clases
30/102
@Lob,@Transient
@Lob
@Transient
nov-08 [email protected] 30
-
7/31/2019 4. Mapeo de Clases
31/102
Tabla de tipos hibernate
nov-08 [email protected] 31
-
7/31/2019 4. Mapeo de Clases
32/102
Tabla de tipos hibernate (2)
nov-08 [email protected] 32
-
7/31/2019 4. Mapeo de Clases
33/102
Mapeo de clases
nov-08 [email protected] 33
-
7/31/2019 4. Mapeo de Clases
34/102
Identity vs equality Java identity Object equality Database identity
nov-08 [email protected] 34
. . . clave primaria de la tabla Se mapean con la etiqueta Por ello todas las clasestodas las clases EntidadEntidad deben tener identificadordeben tener identificador,
usualmente un Long
No siempre sern iguales El periodo de tiempo que s lo son se le denomina "mbito
de identidad garantizada, mbito de persistencia
-
7/31/2019 4. Mapeo de Clases
35/102
Identidad de BBDD
nov-08 [email protected] 35
La clave debe ser inmutable, una vezasignada no se puede cambiar
JPA usa el setter cuando se carga enmemoria. No debe ser pblico y no puede serprivado protected
protected
-
7/31/2019 4. Mapeo de Clases
36/102
-
7/31/2019 4. Mapeo de Clases
37/102
Clave candidata
Condiciones Nunca puede ser NULL Cada fila es una combinacin nica
nov-08 [email protected] 37
un a pu am ar Si hay varias se escogera solo una, las otras
son UNIQUE Se forman con una sola o combinaciones de
propiedades Si no hay ninguna est mal el diseo
-
7/31/2019 4. Mapeo de Clases
38/102
Claves naturales
Tienen significado en el contexto de uso(para el usuario: las entiende y las maneja) DNI
nov-08 [email protected] 38
La experiencia demuestra que causanproblemas a largo plazo si se usan comoclaves primarias Siempre son NOT-NULL? Nunca van a cambiar? Nunca se van a repetir?
Y si nos equivocamosal dar el alta?, luego nose puede cambiar
-
7/31/2019 4. Mapeo de Clases
39/102
Business keys
Podran ser claves candidatas Pero existe la probabilidad (baja) de que suvalor cambie en el tiempo
nov-08 [email protected] 39
Son de utilidad para el usuario ya que lasemplea de forma cotidiana P.e. el nombre del departamento (puede cambiar
pero pocas veces) No sirven como clave primaria pero tienen su
utilidad
-
7/31/2019 4. Mapeo de Clases
40/102
Claves artificiales (surrogatekeys) Sin significado en el contexto Siempre generadas por el sistema Varias estrategias de generacin
nov-08 [email protected] 40
IDENTITY SEQUENCE TABLE
hi/lo uuid.hex Nuevas implementando un interfaz
generan int, long o short
genera string de 32 caracteresnico en el mundo
Ver documentacin dereferencia
JPA
Hib
-
7/31/2019 4. Mapeo de Clases
41/102
-
7/31/2019 4. Mapeo de Clases
42/102
@Id
En cada entidad al menos: Una @Id
que forma clave (clave compuesta) Una @EmbeddedId
nov-08 [email protected] 42
-
7/31/2019 4. Mapeo de Clases
43/102
@GeneratedValue
Indica que la clave no es asignada porel programa sino generada por el
nov-08 [email protected] 43
El bl d l l ()
-
7/31/2019 4. Mapeo de Clases
44/102
El problema del equals() yhashCode()
Suponiendo que el hashCode() y el
nov-08 [email protected] 44
equals() se calculan incluyendo el
nombre del usuario i == ii ?
-
7/31/2019 4. Mapeo de Clases
45/102
-
7/31/2019 4. Mapeo de Clases
46/102
HashCode() y equals()
No se pueden definir sobre las clavesartificiales ya que no existen hasta queno se inserta en la BBDD
nov-08 [email protected] 46
Se generan all, al hacer el INSERTAl final de la transaccin
Se deben definir sobre los atributos que
forman una clave candidata o en sudefecto sobre una business key
-
7/31/2019 4. Mapeo de Clases
47/102
Mapeo de clases
nov-08 [email protected] 47
-
7/31/2019 4. Mapeo de Clases
48/102
Entities vs Value types
Una de las riquezas de los modelos OO ms clases que tablas
nov-08 [email protected] 48
cuales los objetos son relevantes parael usuario En JPA siempre llevan identificador y deben
ajustarse a un convenio de nombres(mnimo)
-
7/31/2019 4. Mapeo de Clases
49/102
Entities vs Value types Tipos valor son aquellas clases cuya identidad no es
conocida por el usuario, ni le importa Tienen semntica de composicin o directamente aparecen
como atributos en los diagramas UML
nov-08 [email protected] 49
Las clases JDK (Integer, Long, etc.) son de este tipo Su ciclo de vida depende totalmente de la entidad a la que
estn asignados Los objetos Valor slo tienen referencias entrantes de los
objetos que los poseen y no pueden ser compartidos con
otros objetos La diferencia entre uno y otro es difcil de definir ya
que depende del contexto
-
7/31/2019 4. Mapeo de Clases
50/102
Referencias
A entidades Se salvan como claves ajenas
nov-08 [email protected] 50
Se salvan en la misma tabla excepto si son
colecciones (p.e. un usuario tiene variasdirecciones)
Se usa la etiqueta @Embedded
-
7/31/2019 4. Mapeo de Clases
51/102
Ejemplo
nov-08 [email protected] 51
-
7/31/2019 4. Mapeo de Clases
52/102
Mapeos
Si ha ms de un VT del mismo ti o en una
nov-08 [email protected] 52
entidad hay que forzar los nombres de lascolumnas ya que si no se repiten en el DDL
-
7/31/2019 4. Mapeo de Clases
53/102
Mapeo de clases
nov-08 [email protected] 53
Estrategias para mapear
-
7/31/2019 4. Mapeo de Clases
54/102
Estrategias para mapear
herencia
JPA permite 3 Tabla por cada clase no abstracta
nov-08 [email protected] 54
. _ _
Tabla por cada clase InheritanceType.JOINED
Tabla nica para toda la jerarqua InheritanceType.SINGLE_TABLE
InheritanceType.TABLE_PER_CLASS
-
7/31/2019 4. Mapeo de Clases
55/102
Table per concrete class Una tabla por cada clase no abstracta Las propiedades heredadas se repiten en cada tabla Problemas
Asociaciones polimrficas (de la superclase) se hacen
nov-08 [email protected] 55
pon en o a en ca a a a Consultas polimrficas son menos eficientes, son variasSELECT o una UNION Cambios en la superclase se propagan por todas las tablas
Ventajas
Cuando slo se necesitan consultas contra las clases hijas Recomendable
Cuando no sea necesario el polimorfismo
-
7/31/2019 4. Mapeo de Clases
56/102
Table per concrete classSe crea una tabla por cada
clase no abstractaabstracta
nov-08 [email protected] 56
-
7/31/2019 4. Mapeo de Clases
57/102
Table per concrete class
nov-08 [email protected] 57
Atencin: Opcional en JPA, puedeque no todos los proveedores JPAla soporten
InheritanceType.SINGLE_TABLE
-
7/31/2019 4. Mapeo de Clases
58/102
Table per class hierarchy Todas las clases persisten en una nica tabla con la
unin de todas las columnas de todas las clases Usa un discriminador en cada fila para distinguir el
tipo
nov-08 [email protected] 58
en a as Es simple y eficiente Soporta el polimorfismo Fcil de implementar Fcil modificar cualquier clase
Desventaja Todas las columnas no comunes deben ser nullables Pueden quedar columnas vacas
-
7/31/2019 4. Mapeo de Clases
59/102
Table per class hierarchy (2) Mapeo
En la clase raiz aadir @DiscriminatorColumn En cada clase hija aadir @DiscriminatorValue
nov-08 [email protected] 59
Si las clases hijas tienen pocas propiedades (sediferencian ms en comportamiento) y senecesitan asociaciones polimrficas
Debera ser tomada como estrategia por defecto
-
7/31/2019 4. Mapeo de Clases
60/102
Table per class hierarchy (3)
nov-08 [email protected] 60
-
7/31/2019 4. Mapeo de Clases
61/102
Table per class hierarchy (4)
nov-08 [email protected] 61
@DiscriminatorColumn,@DiscriminatorValueno son necesarios, se toman valores pordefecto si no estn presentes
-
7/31/2019 4. Mapeo de Clases
62/102
-
7/31/2019 4. Mapeo de Clases
63/102
Table per subclass (2)
Recomendacin Si las clases hijas se diferencian mucho en
sus ro iedades tienen muchas
nov-08 [email protected] 63
Si se necesita polimorfismo Cuando los nullables den problemas
-
7/31/2019 4. Mapeo de Clases
64/102
Table per subclass (3)
nov-08 [email protected] 64
-
7/31/2019 4. Mapeo de Clases
65/102
Table per subclass (4)
nov-08 [email protected] 65
-
7/31/2019 4. Mapeo de Clases
66/102
Mapeo de clases
nov-08 [email protected] 66
-
7/31/2019 4. Mapeo de Clases
67/102
Colecciones de Value Types
No existen en JPA, solo hibernate Sets, bags, lists, y maps de value types
nov-08 [email protected] 67
inicializar una coleccin
Forma de inicializar
-
7/31/2019 4. Mapeo de Clases
68/102
colecciones
Siempre se declarael Interfaz genrico
nov-08 [email protected] 68
una clase deimplementacincompatible con elinterfaz
Siempre se inicializanen la declaracin, nonoen el constructoren el constructor
Relacin entre colecciones JDK
-
7/31/2019 4. Mapeo de Clases
69/102
y mapeos hibernate
nov-08 [email protected] 69
Lo ms usadopara colecciones
-
7/31/2019 4. Mapeo de Clases
70/102
Mapeo de Set
@Column, @JoinTableopcionales, solofuerzan nombres de
nov-08 [email protected] 70
La clave de ITEM_IMAGE
es compuesta para evitarduplicados en el mismoITEM (un set no losadmite)
-
7/31/2019 4. Mapeo de Clases
71/102
-
7/31/2019 4. Mapeo de Clases
72/102
Mapeo de Bag
nov-08 [email protected] 72
Clave artificial para hacer cada filanica (bag permite duplicados)
-
7/31/2019 4. Mapeo de Clases
73/102
-
7/31/2019 4. Mapeo de Clases
74/102
Sorted & ordered cols.
En hibernate no es lo mismo Sorted se hace en memoria (JVM) usandointerfaz Com arable
nov-08 [email protected] 74
Ordered se hace en la BBDD con SQL Sorted solo aplicable a SortedMap y
SortedSet
-
7/31/2019 4. Mapeo de Clases
75/102
Sorted collections
Solo para Set y Map(se hace en JVM)
nov-08 [email protected] 75
-
7/31/2019 4. Mapeo de Clases
76/102
Ordered collections
nov-08 [email protected] 76
Para cualquier coleccin(excepto List()); se haceen la BDD con un order by
Colecciones de
-
7/31/2019 4. Mapeo de Clases
77/102
componentes
nov-08 [email protected] 77
Esta clase debe tenerredefinidos hashCode() yequals()
-
7/31/2019 4. Mapeo de Clases
78/102
Mapeo de clases
nov-08 [email protected] 78
-
7/31/2019 4. Mapeo de Clases
79/102
No son gestionadasAl contrario que en EJB 2.x no son
gestionadas
nov-08 [email protected] 79
,
una referencia Hibernate no cambia la semntica de
Java No es lo mismo de AB que BA
-
7/31/2019 4. Mapeo de Clases
80/102
Asociaciones en Java
Si la relacin es bidireccionalsiempresiempre hay que establecer larelacin en las dos clases
nov-08 [email protected] 80
como este para gestionar de
forma cmoda la relacin
-
7/31/2019 4. Mapeo de Clases
81/102
Multiplicidad en JPA one-to-one many-to-many
nov-08 [email protected] 81
- - many-to-one
son direccionales, esta es la inversa de una
one-to-many
-
7/31/2019 4. Mapeo de Clases
82/102
Unidireccional muchos a uno
nov-08 [email protected] 82
Bid siempre debetener un Item
-
7/31/2019 4. Mapeo de Clases
83/102
Bidireccional uno a muchos
nov-08 [email protected] 83
Doble actualizacin
-
7/31/2019 4. Mapeo de Clases
84/102
La doble actualizacin En java es necesaria pero en SQL la asociacin
es una foreign key. Solo se actualiza el campo en una tabla.
nov-08 [email protected] 84
erna e v g a am os ex remos y e ec a as
dos modificaciones en Java Se producirn dos INSERT o dos UPDATE
(segn) cuando slo una es necesaria
Para evitarlo se marca un extremo conmappedBy=campo_FK_del_otro_extremo
-
7/31/2019 4. Mapeo de Clases
85/102
Propagacin en cascada
nov-08 [email protected] 85
Si no hay cascadahay que salvar losdos objetos aunqueestn asociados
Con cascada basta salvaral padre (persistencia poralcanzabilidad)
Cascada o persistencia
-
7/31/2019 4. Mapeo de Clases
86/102
transitiva Se llama de las dos formas Se da en las relaciones padre/hijo (los hijos
dependen del padre)
nov-08 [email protected] 86
Se puede especi icar por separado el tipo
cascada deseado para cada asociacin
En doc de referenciabuscar tipos de cascada
Transitive persistence
-
7/31/2019 4. Mapeo de Clases
87/102
-
7/31/2019 4. Mapeo de Clases
88/102
Tipos de cascada JPAALL MERGE
REFRESH REMOVE
nov-08 [email protected] 88
-
7/31/2019 4. Mapeo de Clases
89/102
Cascada delete-orphan
No ser una com osicin?
nov-08 [email protected] 89
-
7/31/2019 4. Mapeo de Clases
90/102
Uno o uno con foreign key
nov-08 [email protected] 90
En la clase que no
tiene la FK
-
7/31/2019 4. Mapeo de Clases
91/102
Uno a uno con la misma clave Dos tablas comparten la misma clave
Es clave primaria en las dos
nov-08 [email protected] 91
Problema: solo se genera una clave, lasegunda tabla debe esperar a que segenere en la primera Se usa un generador especial para la
segunda
Uno a uno
-
7/31/2019 4. Mapeo de Clases
92/102
misma Clave
Con este generador toma laclave de la otra
nov-08 [email protected] 92
-
7/31/2019 4. Mapeo de Clases
93/102
Uno a muchos con BagYa est visto con SET pero se puede
hacer con BAG si no se necesita
nov-08 [email protected] 93
Al no tener que garantizar el orden nivigilar los duplicados no hace faltacargar la coleccin para hacer las
inserciones. Se consigue ms eficiencia.
-
7/31/2019 4. Mapeo de Clases
94/102
Uno a muchos con Bag
nov-08 [email protected] 94
h
-
7/31/2019 4. Mapeo de Clases
95/102
Uno a muchos con List Para mantener el orden en el que fueron insertados Esto es, no se ordenan despus de metidos como enSortedSet (o SortedMap)
No lleva ma edB =
nov-08 [email protected] 95
Dos @JoinColumn
Esto anula actualizacin de este extremo
M h @O d B
-
7/31/2019 4. Mapeo de Clases
96/102
a Muchos @OrderBy
nov-08 [email protected] 96
List mantiene en memoria elorden trado de BDD
pero en BDD no semantiene el orden en elque se insertaron en List
Muchos a muchos
idi i l
-
7/31/2019 4. Mapeo de Clases
97/102
unidireccional
nov-08 [email protected] 97
Se puede hacertambin con List
e idBag
Muchos a muchos
bidi i l
-
7/31/2019 4. Mapeo de Clases
98/102
bidireccional@JoinTable opcional
nov-08 [email protected] 98
M d l i ti
-
7/31/2019 4. Mapeo de Clases
99/102
Mapeo de clases asociativas
nov-08 [email protected] 99
En BDD una muchos a muchoscon ms columnas
En java es una clase ms,mapeada con dos relaciones
muchos a uno y clavecompuesta
-
7/31/2019 4. Mapeo de Clases
100/102
tiva
Clase para la clavecompuesta
nov-08 [email protected] 100
Clase
asoc
i
. . .
-
7/31/2019 4. Mapeo de Clases
101/102
nov-08 [email protected] 101
Clave compuesta:la clase Id debe cumplirunas condiciones
P ima Ke Class
-
7/31/2019 4. Mapeo de Clases
102/102
Primary Key Class: Es una clase Java (POJO) pblica. Constructor pblico sin argumentos.
public o protected. Debe ser serializable.
Define equals() and hashCode().
nov-08 [email protected] 102