Actualizado el 13 de Julio del 2021 (Publicado el 14 de Marzo del 2021)
629 visualizaciones desde el 14 de Marzo del 2021
445,3 KB
43 paginas
Creado hace 15a (02/03/2010)
Autentia Real Business Solutions
www.autentia.com
Hibernate
Hibernate
Esta obra está licenciada bajo licencia
Creative Commons de Reconocimiento-No comercial-Sin obras derivadas 2.5.
v0.0
1 – 1
Motivación de la charla
• ¿ Por qué esta charla ?
– Diferentes audiencias, mismos problemas.
www.autentia.com
Esta obra está licenciada bajo licencia
Creative Commons de Reconocimiento-No comercial-Sin obras derivadas 2.5.
1 – 2
Introducción
www.autentia.com
• El acceso a base de datos aparece prácticamente en
todos los proyectos, por pequeños que sean.
• El acceso a base de datos es mecánico y repetitivo.
• ¿Por qué no utilizar un sistema que nos facilite esta
tarea?
• Hibernate puede ser la solución
http://www.hibernate.org/
• Otras alternativas: EJB 3.0, JDO
– Wikipedia: object relational mapping
– http://www.javaskyline.com/database.html
Esta obra está licenciada bajo licencia
Creative Commons de Reconocimiento-No comercial-Sin obras derivadas 2.5.
1 – 3
Comprendiendo los principios del
O/R Mapping
www.autentia.com
• Las principales diferencias entre el mundo relacional y el
mundo orientado a objetos:
ORIENTACIÓN A OBJETOS
Clases y Objetos
Atributos
Indentidad
Relación o referencia a objetos
Herencia / Polimorfismo
Métodos
Código portable
BASES DE DATOS RELACIONALES
Tablas y Registros
Columnas
Clave Primaria
Clave Extranjera
No Soportado
Procedimientos almacenados
No necesariamente (depende del fabricante)
Esta obra está licenciada bajo licencia
Creative Commons de Reconocimiento-No comercial-Sin obras derivadas 2.5.
1 – 4
Comprendiendo los principios del
O/R Mapping
www.autentia.com
• El O/R Mapping consiste en representar cada tabla de la base de
datos como una clase o un conjunto de clases.
• Gracias al O/R Mapping podemos seguir trabajando con Clases
Java sin preocuparnos de la base de datos subyacente.
– Nos podemos centrar en la lógica de negocio
– Aseguramos la separación entre capas no pasando objetos propios de una
capa a la capa contigua (Connection, Statement, ResultSet, ...).
• Cuando entre dos tablas existe integridad referencial, tendremos
un clase que hace referencia a otra.
Esta obra está licenciada bajo licencia
Creative Commons de Reconocimiento-No comercial-Sin obras derivadas 2.5.
1 – 5
Diseñando el modelo
www.autentia.com
• Gracias a Hibernate (o cualquier otro O/R mapping
similar) nos centraremos en nuestro modelo de clases, y
NO en el modelo de tablas.
• De esta manera nuestro negocio no queda condicionado
por la capa de persistencia.
• O mínimamente condicionado. Recomendaciones de
Hibernate:
– Cada entidad debe tener un identificador.
– El identificador debe ser “nulable” (no un tipo básico).
– Cuidado con los métodos equals() y hashCode().
Esta obra está licenciada bajo licencia
Creative Commons de Reconocimiento-No comercial-Sin obras derivadas 2.5.
1 – 6
¿ Cómo definir el modelo ?
www.autentia.com
• Para convertir nuestras clases de negocio en entidades
persistentes tenemos dos opciones:
– Uso de anotaciones
• Muy recomendable su uso, por su sencillez.
• Apuesta por la idea de: “Convención frente a configuración”.
• Requiere Java 5 (soporte de anotaciones).
• Son las mismas anotaciones que JPA (Java Persistence API).
– Uso de descriptores en ficheros XML
• Ficheros XML externos donde se especifica todos los mapeos entre la
clase y la tabla correspondiente.
• Se necesita más tiempo para desarrollar (puesto que tenemos que
escribir dos ficheros en vez de uno)
• Mas complejo de mantener, y hay mas información redundante.
Esta obra está licenciada bajo licencia
Creative Commons de Reconocimiento-No comercial-Sin obras derivadas 2.5.
1 – 7
Declarar entidades
www.autentia.com
• Nuestras entidades no son más que un conjunto de
atributos privados con sus correspondientes “getters” y
“setters” (también llamado POJO – Plain Old Java
Object).
– Definir la entidad:
• @Entity
– Definir la tabla de una entidad:
• @Table(name=”Tabla”)
• Si no se especifica, se usa el nombre de la entidad.
http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=hibernateAnnotations
http://www.oracle.com/technology/products/ias/toplink/jpa/resources/toplink-jpa-annotations.html
Esta obra está licenciada bajo licencia
Creative Commons de Reconocimiento-No comercial-Sin obras derivadas 2.5.
1 – 8
Mapear entidades
• ¿ Donde mapear ?
www.autentia.com
– Atributos: field access
– Métodos: property access.
• Debemos seleccionar uno de los dos mecanismos.
• Hibernate usará uno u otro en función de la posición de
las anotaciones @Id o @EmbeddedId
• No debemos mezclar.
• Se puede modificar con la anotación
– @AccessType (Hibernate)
Esta obra está licenciada bajo licencia
Creative Commons de Reconocimiento-No comercial-Sin obras derivadas 2.5.
1 – 9
Claves primarias
www.autentia.com
• Hibernate recomienda que cada entidad tenga al menos un
atributo que la identifique unívocamente.
– Para especificar la clave primaria: @Id
• Generación de las claves primarias:
– @GeneratedValue(strategy = GenerationType.AUTO)
• Se selecciona automáticamente la forma de generar las claves
primarias en función de la base de datos que estemos usando.
– @GeneratedValue(strategy = GenerationType.IDENTITY)
– @GeneratedValue(strategy = GenerationType.SEQUENCE)
• Claves autogeneradas por una secuencia.
• Con @SequenceGenerator especificamos los datos de la secuencia.
– @GeneratedValue(strategy = GenerationType.TABLE)
• Claves autogeneradas por una tabla.
• Con @TableGenerator especificamos los datos de la tabla.
Esta obra está licenciada bajo licencia
Creative Commons de Reconocimiento-No comercial-Sin obras derivadas 2.5.
1 – 10
Claves primarias compuestas
• Dos técnicas:
– Usando @EmbeddedId
• @EmbeddedId para marcar el atributo de la clave primaria en la
entidad correspondiente
www.autentia.com
• Anotar la clase de ese atributo cómo @Embeddable
– Usar a nivel de clase la anotación @IdClass (.....class) y
anotar los atributos en la clase indicada como @Id
Esta obra está licenciada bajo licencia
Creative Commons de Reconocimiento-No comercial-Sin obras derivadas 2.5.
1 – 11
Mapeo de atributos
www.autentia.com
– Tipos Básicos. Tipos primitivos, “wrappers” y valores
enumerados.
• @Basic
• Valor por defecto.
– Ajuste fino de tipos básicos
• Valores enumerados: @Enumerated
– Almacenar el ordinal: @Enumerated(EnumType.ORDINAL) (por defecto)
– Almacenar el texto: @Enumerated(EnumType.STRING)
• Objetos largos: @Lob (BLOB y CLOB)
• Tiempo:
– @Temporal(TemporalType.DATE)
– @Temporal(TemporalType.TIME)
– @Temporal(TemporalType.TIMESTAMP)
java.sql.Date
java.sql.Time
java.sql.Timestamp
• Atributo no persistente: @Transient
Esta obra está licenciada bajo licencia
Creative Commons de Reconocimiento-No comercial-Sin obras derivadas 2.5.
1 – 12
Mapeo de relaciones
• Especificar las relaciones entre entidades suele ser la
parte más complicada de cualquier O/R Mapping.
• Con las anotaciones se simplifica bastante el problema.
www.autentia.com
– Principales anotaciones (la izquierda se refiere a
“this” y la derecha a la otra entidad):
• @OneToOne
• @ManyToOne
• @OneToMany
• @ManyToMany
– Para refinar como se refleja la relación de las entidades en la
base de datos:
• @JoinColumn (ManyToOne)
• @JoinTable (ManyToMany)
Esta obra está licenciada bajo licencia
Creative Commons de Reconocimiento-No comercial-Sin obras derivadas 2.5.
1 – 13
Mapeo de relaciones
• Relación one-to-one: Se pueden usar diferentes
técnicas
– Compartiendo PK
www.autentia.com
– Usando @Embedded y @Embeddable
Esta obra está licenciada bajo licencia
Creative Commons de Reconocimiento-No comercial-Sin obras derivadas 2.5.
1 – 14
Mapeo de relaciones
• Relación one-to-one: Se pueden usar diferentes
técnicas (cont.)
– A través de FK
www.autentia.com
– A través de tabla intermedia.
Esta obra está licenciada bajo licencia
Creative Commons de Reconocimiento-No comercial-Sin obras derivadas 2.5.
1 – 15
Mapeo de relaciones
• Relación many-to-one: Dos técnicas:
– Usando FK.
www.autentia.com
– Usando tabla intermedia.
Esta obra está licenciada bajo licencia
Creative Commons de Reconocimiento-No comercial-Sin obras derivadas 2.5.
1 – 16
Mapeo de relaciones
• Relación one-to-many.
– A la hora de mapear este tipo de relaciones es necesario
identificar si es bidireccional o no.
– En relaciones bidireccionales, dos técnicas:
• FK
www.autentia.com
• Tabla Intermedia (ver anterior)
Esta obra está licenciada bajo licencia
Creative Commons de Reconocimiento-No comercial-Sin obras derivadas 2.5.
1 – 17
Mapeo de relaciones
• Relación one-to-many (cont.)
En relaciones unidireccionales, dos técnicas:
• Usando FK (no recomendado por Hibernate)
www.autentia.com
• Usando Tabla Intermedia.
Esta obra está licenciada bajo licencia
Creative Commons de Reconocimiento-No comercial-Sin obras derivadas 2.5.
1 – 18
Mapeo de las relaciones
• Many-to-Many.
– Sólo una posibilidad. A través de tabla intermedia.
www.autentia.com
Esta obra está licenciada bajo licencia
Creative Commons de Reconocimiento-No comercial-Sin obras derivadas 2.5.
1 – 19
No simetría de las relaciones
www.autentia.com
• En relaciones bidireccionales (mapeadas en ambos
lados) uno de los lados es el encargado de manejar la
relación. El otro lado no es más que un “espejo”.
• Esto puede producir errores “inesperados” si no se tiene
claro este concepto.
Esta obra está licenciada bajo licencia
Creative Commons de Reconocimiento-No comercial-Sin obras derivadas 2.5.
1 – 20
No simetría de las relaciones
• Para evitar problemas podemos programar de manera
“defensiva” creando métodos que se encarguen de
manejar correctamente la relación (suponemos una
relación many-to-many entre Persona y Evento):
www.autentia.com
...
// Clase Persona
...
...
// Clase Persona
...
protected List getEventos() {
Comentarios de: hibernate (0)
No hay comentarios