icono_twiter icono LinkedIn
Alvaro Cuesta Viñolo

Consultor tecnológico de desarrollo de proyectos informáticos.

Puedes encontrarme en Autentia: Ofrecemos servicios de soporte a desarrollo, factoría y formación

Somos expertos en Java/JEE

Ver todos los tutoriales del autor

Fecha de publicación del tutorial: 2011-03-30

Tutorial visitado 4.268 veces Descargar en PDF
Hibernate:Como definir la forma de persistir nuestros objetos con CompositeUserType

Hibernate - Como definir la forma de persistir nuestros objetos mediante la interfaz CompositeUserType.


0. Índice de contenidos.

1. Introducción

Trabajando con Hibernate podemos vernos en la necesidad de persistir un objeto de una forma específica, para ello el framework nos ofrece una serie de interfaces que nos facilitan la tarea.

Tenemos dos opciones:

  • La interfaz "org.hibernate.usertype.UserType"
    La clase que implementamos extendiendo dicha interfaz es la clase que sabe como serializar instancias de otra clase desde/hacia JDBC.
    Solamente es capaz de definir tipos simples.

  • La interfaz "org.hibernate.usertype.CompositeUserType"
    Esta interfaz es una versión ampliada de la anterior, permitiendo definir "propiedades".
    El uso de CompositeUserType esta asociado a la necesidad de tener más de una columna de base de datos para representar un objeto.

2. Entorno

El tutorial está escrito usando el siguiente entorno:

3. CompositeUserType.

Vamos a utilizar "org.hibernate.usertype.CompositeUserType".
Las implementaciones deben ser inmutables y declarar un constructor público predeterminado.
Esta interfaz, debe aplicarse a campos anotados con @Type donde definimos el nombre de la clase que implementa la interfaz.
Ej. @Type(type = "com.autentia.xxx.yyy.StatusType")

Imaginemos que tenemos una entidad cuenta que posee una máquina de estados con un estado actual y un estado anterior.
Los posibles estados son ACTIVE, UNCOVER, SUSPEND, CANCELED.
Estos estados son servicios de Spring que poseen la funcionalidad que implementa las transiciones desde este al resto de estados ante determinados eventos.
Para aislar la funcionalidad de la máquina de estados la encapsulamos en la clase StatusHolder,como no es el objetivo del tutorial no profundizaremos en su implementación.

La entidad Account debe tener el siguiente atributo que nos permite persistir en BBDD los nombres de las clases que se encuentran asociadas al valor actual y anterior.


Pongo la clase completa como ejemplo de implementación.

4. Conclusión.

Como vemos en este ejemplo, simplemente implementando una interfaz ("org.hibernate.usertype.CompositeUserType" en este caso) somos capaces de controlar el modo en el que hibernate persiste nuestras clases.
Esto nos proporciona un mayor control y conocimiento sobre nuestro ORM.

Espero que os haya sido de utilidad.
Cualquier aclaración, duda o sugerencia podéis incluirla en la zona de comentarios.

Un saludo.
Alvaro Cuesta.

A continuación puedes evaluarlo:

Regístrate para evaluarlo

Por favor, vota +1 o compártelo si te pareció interesante

Share |
Anímate y coméntanos lo que pienses sobre este TUTORIAL: