Trucos al utilizar colecciones en Hibernate

El dia de hoy tuve que agregar nuevos campos a una colección. A primera vista, esto era de los más sencillo:

  1. Modificar el POJO
  2. Mapear con Hibernate los nuevos atributos
  3. Modificar método addElement de la clase que contiene a la colección.
  4. Modificar JSP de edición y clase Form (trabajo con struts)
  5. Compilar y listo!
Sin embargo, me encontré que al ejecutar la aplicación e ingresar datos a los nuevos campos y querer grabar, la base de datos arrojó el error 'unique constraint'. 

Después de un buen rato de prueba y error, decidí crear una nueva tabla para almacenar los datos de la colección, con un 'insert/select' traspasé los datos de la tabla original a esta nueva tabla, y luego renombré las tablas de tal manera que la tabla nueva fuera ahora la tabla oficial.

Y para mi sorpresa, este pequeño truco hizo la diferencia! Ahora todo funcionaba a la perfección.

Conclusiones:
  • Me parece que hibernate, para las colecciones, crea una tabla y una llave primaria que utiliza para identificar cuando un elemento de la colección ha sido modificado. Esto no lo he comprobado.
  • Quizá si se modifica esta llave primaria, en vez de crear una segunda tabla y todo lo demás que hice, sería suficiente para que hibernate implementara bien los cambios
Escrito por Omar Otoniel

Comentarios

Entradas populares de este blog

Batch File como Servicio de Windows

Cómo crear archivos XML en Java con JAXB

Ejecutando Jetty como un Servicio en Windows Server 2012