Usuario anónimo
¿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?
1037
3
De la documentación comunitaria:
Así que la lista de opciones posibles son,
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?
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.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.