4. Mapeo de Clases

Embed Size (px)

Citation preview

  • 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