Pregunta Hibernate hbm2ddl.auto valores posibles y lo que hacen?


Realmente quiero saber más sobre la actualización, la exportación y los valores que se le pueden dar a 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 sobre DB:

  • nuevas tablas
  • nuevas columnas en tablas viejas
  • columnas eliminadas
  • tipo de datos de una columna modificada
  • un tipo de columna cambió sus atributos
  • tablas caídas
  • los valores de una columna han cambiado

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


900
2018-01-13 06:40


origen


Respuestas:


Desde el 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.

p.ej. validar | actualización | crear | crear-soltar

Entonces la lista de opciones posibles es,

  • validar: valida el esquema, no realiza cambios en la base de datos.
  • actualizar: actualizar el esquema
  • crear: crea el esquema, destruyendo datos previos.
  • crear-soltar: suelta el esquema cuando SessionFactory se cierra explícitamente, generalmente cuando se detiene la aplicación.

Estas opciones parecen ser herramientas de desarrollo y no para facilitar ninguna base de datos de nivel de producción, es posible que desee echarle un vistazo a la siguiente pregunta; Hibernate: hbm2ddl.auto = ¿actualizar en producción?


919
2017-11-06 19:25



También está el valor no documentado de "ninguno" para deshabilitarlo por completo.


161
2018-06-08 14:52



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

En nuestro entorno de desarrollo establecemos hibernate.hbm2ddl.auto=create-drop para soltar y crear una base de datos limpia cada vez que implementamos, para que nuestra base de datos se encuentre en un estado conocido.

En teoría, puedes establecer hibernate.hbm2ddl.auto=update para actualizar su base de datos con cambios en su modelo, pero no confiaría 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 configure hibernate.hbm2ddl.auto - el valor predeterminado es no hacer cambios en la base de datos. En su lugar, creamos manualmente un script de actualización de SQL DDL que aplica los cambios de una versión a la siguiente.


141
2018-01-13 08:11



yo usaría liquibase para actualizar su db. La función de actualización de esquema de hibernate es realmente solo o.k. para un desarrollador mientras desarrollan nuevas funciones. En una situación de producción, la actualización de db debe manejarse con más cuidado.


50
2018-03-23 07:40



Aunque es una publicación bastante antigua, como hice algunas investigaciones sobre el tema, pensé en compartirla.

hibernate.hbm2ddl.auto

Según la documentación, puede tener cuatro valores válidos:

crear | actualización | validar | crear-soltar

A continuación se encuentra la explicación del comportamiento mostrado por estos valores:

  • crear : - crear el esquema, los datos previamente presentes (si hay) en el esquema se pierden
  • actualización: - actualizar el esquema con los valores dados.
  • validar: - validar el esquema. No hace cambios en el DB.
  • create-drop: - crea el esquema destruyendo los datos previamente presentes (si existen). También descarta el esquema de la base de datos cuando se cierra SessionFactory.

Los siguientes son los puntos importantes que vale la pena mencionar:

  • En caso de actualizar, si el esquema no está presente en el DB, entonces se crea el esquema.
  • En caso de validar, si el esquema no existe en DB, no se crea. En cambio, lanzará un error: Table not found:<table name>
  • En caso de crear-soltar, el esquema no se elimina al cerrar la sesión. Solo se aplica al cerrar SessionFactory.
  • En caso de que dé algún valor a esta propiedad (por ejemplo, abc, en lugar de los cuatro valores mencionados anteriormente) o simplemente se deja en blanco. Muestra el siguiente comportamiento:

    -Si el esquema no está presente en el DB: - Crea el esquema

    -Si el esquema está presente en el DB: actualizar el esquema


26
2017-08-07 14:11



hibernate.hbm2ddl.auto valida automáticamente y exporta DDL al esquema cuando se crea sessionFactory.

Por defecto, no realiza ninguna creación o modificación automáticamente en DB. Si el usuario establece uno de los valores a continuación, está haciendo cambios en el esquema DDL automáticamente.

  • crear, crear un esquema

    <entry key="hibernate.hbm2ddl.auto" value="create">
    
  • actualización - actualización del esquema existente

    <entry key="hibernate.hbm2ddl.auto" value="update">
    
  • validar - validar el esquema existente

    <entry key="hibernate.hbm2ddl.auto" value="validate">
    
  • create-drop: crea y suelta el esquema automáticamente cuando se inicia y finaliza una sesión

    <entry key="hibernate.hbm2ddl.auto" value="create-drop">
    

19
2018-05-11 17:26



Dediqué un entrada en el blog para el más común Estrategias de generación Hibernate DDL:

  1. los hibernate.hbm2ddl.auto="update" es conveniente pero menos flexible si planea agregar funciones o ejecutar algunas secuencias de comandos personalizadas.
  2. los enfoque más flexible es usar Vía migratoria.

Sin embargo, incluso si usa Flyway, aún puede generar el script de migración inicial usando hbm2ddl. En Este artículo, puede ver cómo puede combinar el Modelo de entidad JPA con el Modelo de tabla jOOQ.


16
2018-05-15 12:46