Hibernate
Hibernate es una herramienta de mapeo objeto-relacional (ORM) para la plataforma Java (y disponible también para .Net con el nombre de NHibernate) que facilita el mapeo de atributos entre una base de datos relacional tradicional y el modelo de objetos de una aplicación, mediante archivos declarativos (XML) o anotaciones en los beans de las entidades que permiten establecer estas relaciones. (Definición de wikipedia)
Ejemplo de una definición con sus anotaciones. Utilizamos las anotaciones @Table y @Column para cambiar los nombres por defecto.
Los tipos de asociaciones que tenemos mediante Entities son:
Las asociaciones pueden resolverse con una columna extra (@JoinColumn) en una de las entidades, pero en el caso de las relaciones ManyToMany, una pivot table o Join Table es necesaria (@JoinTable).
Tipos Valor y tipos Entidad (Value and Entity types)
Un Entity Type es una clase java que contiene una colección de datos. Estas entidades serán las tablas de nuestra base de datos. Mientras que los Value Types son las columnas de nuestras tablas, son primitivos como int, boolean o char. Pero también clases que representan una sola pieza de información como LocalDate o BigInteger.Ejemplo de una definición con sus anotaciones. Utilizamos las anotaciones @Table y @Column para cambiar los nombres por defecto.
Tipos básicos (Basic Types)
Hibernate proporciona una lista de tipos básicos que mapea con los tipos de java. Ejemplos: Hibernate selecciona automáticamente los BasicTypes por defecto, pero se pueden especificar con la anotación @Type, como se muestra en este ejemplo: La anotación para identificar el identificar es @Id y la forma de crear el clásico autoincrementador @GeneratedValue.Relaciones entre tablas o entidades
Existen tres formas de asociar datos: mediante Value Types, mediante Embeddables y la que para mi tiene mayor sentido, mediante Entities.Los tipos de asociaciones que tenemos mediante Entities son:
- OneToOne: Una entidad en cada lado.
- OneToMany y ManyToOne: Lista de entidades en un lado y una sola entidad en el otro.
- ManyToMany: Listas de entidades en ambos lados.
Las asociaciones pueden resolverse con una columna extra (@JoinColumn) en una de las entidades, pero en el caso de las relaciones ManyToMany, una pivot table o Join Table es necesaria (@JoinTable).
Single Table Inheritance
Es una forma de emular la herencia orientada a objetos en una base de datos relacional. Al mapear desde una tabla de base de datos a un objeto en un lenguaje orientado a objetos, un campo en la base de datos identifica a qué clase en la jerarquía pertenece el objeto. En este ejemplo el campo "tipo" incluira el discriminador. Ademas de la estrategia InheritanceType.SINGLE_TABLE del ejemplo anterior, tenemos las estrategias InheritanceType.JOINED, y InheritanceType.TABLE_PER_CLASS, las cuales a diferencia de la SINGLE_TABLE, crean tablas adicionales.- JOINED: crea una tabla para la clase padre y otra para cada subclase. Las tablas de las subclases solo contendrán campos únicos a su clase, no del padre.
- TABLE_PER_CLASS: como en la anterior, crea una tabla para la clase padre y otra para cada subclase, pero esta vez las subclases contienen todos los campos del padre y sus propias.
Paso de información desde el controlador
Quizá no estemos interesados en proporcionar toda la información de nuestras Entities a traves de nuestros controladores, para ello tenemos dos maneras de convertir nuestros datos: Data Transfer Objects (DTOs), que suelen tener el nombre de la entidad con el sufijo DTO. La segunda manera es a través de los JSONView. Java proporciona la serialización de vistas, lo que nos permite generar sólo un conjunto de datos de un objeto y convertirlo en otro objeto como XML o JSON. Esto requiere tres pasos:- Crear un interface con los atributos que queremos proporcionar.
- Marcar con la anotación @JSONView los atributos que queremos asociar a esa interface.
- Especificar en el controlador que solo vamos a proporcionar los atributos del interfaz.
Comentarios
Publicar un comentario