¿Cuáles son los posibles valores de la configuración de Hibernate hbm2ddl.auto y qué hacen?

Realmente quiero saber más sobre la actualización, la exportación y los valores que se pueden dar a hibernate.hbm2ddl.auto
Necesito saber cuándo usar el update y cuándo no. ¿Y cuál es la alternativa?

Son cambios que podrían ocurrir sobre la DB:

  • nuevas tablas
  • nuevas columnas en tablas antiguas
  • columnas eliminadas
  • el tipo de datos de una columna cambió
  • el tipo de una columna cambió sus atributos
  • tablas eliminadas
  • valores de una columna cambiados

En cada caso, ¿cuál es la mejor solución?

De la documentación comunitaria:

hibernate.hbm2ddl.auto Valida o exporta automáticamente el esquema DDL a la base de datos cuando se crea la SessionFactory. Con create-drop, el esquema de la base de datos será eliminado cuando la SessionFactory se cierre explícitamente.

e.g. validate | update | create | create-drop

Así que la lista de opciones posibles son,

  • validar: valida el esquema, no hace cambios en la base de datos.
  • update: actualiza el esquema.
  • create: crea el esquema, destruyendo los datos anteriores.
  • create-drop: deja caer el esquema cuando la SessionFactory se cierra explícitamente, normalmente cuando se detiene la aplicación.

Estas opciones parecen estar pensadas para ser herramientas de desarrolladores y no para facilitar ninguna base de datos a nivel de producción, quizás quieras echar un vistazo a la siguiente pregunta; [Hibernate: hbm2ddl.auto=update in production?

Comentarios (13)

La propiedad de configuración se llama hibernate.hbm2ddl.auto.

En nuestro entorno de desarrollo configuramos hibernate.hbm2ddl.auto=create-drop para dejar caer y crear una base de datos limpia cada vez que desplegamos, para que nuestra base de datos esté en un estado conocido.

En teoría, puedes establecer hibernate.hbm2ddl.auto=update para actualizar tu base de datos con los cambios en tu modelo, pero yo no confiaría en eso en una base de datos de producción. Una versión anterior de la documentación decía que esto era experimental, al menos; no sé el estado actual.

Por lo tanto, para nuestra base de datos de producción, no se establece hibernate.hbm2ddl.auto - el valor por defecto es no hacer cambios en la base de datos. En su lugar, creamos manualmente un script de actualización SQL DDL que aplica los cambios de una versión a la siguiente.

Comentarios (3)

Yo utilizaría liquibase para actualizar su base de datos. La función de actualización de esquemas de hibernate sólo está bien para un desarrollador mientras desarrolla nuevas funciones. En una situación de producción, la actualización de la base de datos necesita ser manejada con más cuidado.

Comentarios (1)