¿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 le podrían dar. ¿ hibernate.hbm2ddl.auto
Necesito saber cuándo usar la actualización y cuándo no? ¿Y cuál es la alternativa?
Estos son cambios que podrían ocurrir en la base de datos:
- nuevas mesas
- nuevas columnas en tablas antiguas
- columnas eliminadas
- tipo de datos de una columna cambió
- un tipo de columna cambió sus atributos
- mesas caídas
- los valores de una columna cambiaron
¿En cada caso cuál es la mejor solución?
De la documentación de la comunidad :
hibernate.hbm2ddl.auto Valida o exporta automáticamente el esquema DDL a la base de datos cuando se crea SessionFactory. Con create-drop, el esquema de la base de datos se eliminará cuando SessionFactory se cierre explícitamente.
por ejemplo, validar | actualización | crear | crear-soltar
Entonces la lista de posibles opciones es,
- validar : valida el esquema, no realiza cambios en la base de datos.
- create-only : se generará la creación de la base de datos.
- drop : se generará el drop de la base de datos.
- actualizar : actualiza el esquema.
- crear : crea el esquema, destruyendo los datos anteriores.
- create-drop : elimina el esquema cuando SessionFactory se cierra explícitamente, normalmente cuando se detiene la aplicación.
- none : no hace nada con el esquema, no realiza cambios en la base de datos
Estas opciones parecen estar destinadas a ser herramientas para desarrolladores y no a facilitar bases de datos de nivel de producción; es posible que desee consultar la siguiente pregunta; Hibernar: hbm2ddl.auto=¿actualización en producción?
También existe el valor de none
desactivarlo por completo.
La propiedad de configuración se llamahibernate.hbm2ddl.auto
En nuestro entorno de desarrollo, configuramos hibernate.hbm2ddl.auto=create-drop
para eliminar y crear una base de datos limpia cada vez que implementamos, para que nuestra base de datos esté en un estado conocido.
En teoría, puede configurar hibernate.hbm2ddl.auto=update
la actualización de su base de datos con cambios en su modelo, pero 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 al menos experimental; No sé el estado actual.
Por lo tanto, para nuestra base de datos de producción, no lo configure hibernate.hbm2ddl.auto
; el valor predeterminado es no realizar cambios en la base de datos. En su lugar, creamos manualmente un script de actualización SQL DDL que aplica cambios de una versión a la siguiente.
En primer lugar, los valores posibles para la hbm2ddl
propiedad de configuración son los siguientes:
none
- No se realiza ninguna acción. El esquema no se generará.create-only
- Se generará el esquema de la base de datos.drop
- Se eliminará el esquema de la base de datos.create
- El esquema de la base de datos se eliminará y se creará posteriormente.create-drop
- El esquema de la base de datos se eliminará y se creará posteriormente. Al cerrarSessionFactory
, se eliminará el esquema de la base de datos.validate
- El esquema de la base de datos se validará utilizando las asignaciones de entidades.update
- El esquema de la base de datos se actualizará comparando el esquema de la base de datos existente con las asignaciones de entidades.
Es hibernate.hbm2ddl.auto="update"
conveniente pero menos flexible si planea agregar funciones o ejecutar algunos scripts personalizados.
Entonces, el enfoque más flexible es utilizar Flyway .
Sin embargo, incluso si usa Flyway, aún puede generar el script de migración inicial usando hbm2ddl.