work property name drop doesn data create automatically spring hibernate jpa database-connection ddl

property - spring jpa create table automatically



¿Cómo funciona exactamente la propiedad spring.jpa.hibernate.ddl-auto en Spring? (1)

Estaba trabajando en mi proyecto de aplicación de arranque Spring y noté que, a veces, hay un error de tiempo de espera de conexión a mi Base de Datos en otro servidor (SQL Server). Esto sucede especialmente cuando intento hacer una migración de script con FlyWay pero funciona después de varios intentos.

Luego noté que no especifiqué spring.jpa.hibernate.ddl-auto en mi archivo de propiedades. Investigué un poco y descubrí que se recomienda agregar spring.jpa.hibernate.ddl-auto= create-drop en el desarrollo. Y cámbielo a: spring.jpa.hibernate.ddl-auto= none en producción.

Pero en realidad no entendí cómo funciona realmente y cómo hibernate genera un esquema de base de datos usando create-drop o none value. ¿Puede explicar técnicamente cómo funciona realmente y cuáles son las recomendaciones que utilizan esta propiedad en el servidor de desarrollo y producción? Gracias


Para el registro, la propiedad spring.jpa.hibernate.ddl-auto es específica de Spring Data JPA y es su forma de especificar un valor que eventualmente se pasará a Hibernate bajo la propiedad que conoce, hibernate.hbm2ddl.auto .

Los valores create , create-drop , validate y update influyen básicamente en cómo la administración de la herramienta de esquema manipulará el esquema de la base de datos al inicio.

Por ejemplo, la operación de update consultará la API del controlador JDBC para obtener los metadatos de la base de datos y luego Hibernate compara el modelo de objetos que crea en base a la lectura de sus clases anotadas o asignaciones XML de HBM e intentará ajustar el esquema sobre la marcha.

La operación de update , por ejemplo, intentará agregar nuevas columnas, restricciones, etc., pero nunca eliminará una columna o restricción que pudo haber existido anteriormente pero que ya no lo hace como parte del modelo de objeto de una ejecución anterior.

Por lo general, en escenarios de casos de prueba, es probable que use create-drop para crear su esquema, su caso de prueba agrega algunos datos simulados, ejecuta sus pruebas y luego, durante la limpieza del caso de prueba, los objetos del esquema se caen, dejando un base de datos vacía

En el desarrollo, a menudo es común ver que los desarrolladores usan la update para modificar automáticamente el esquema para agregar nuevas adiciones al reiniciar. Pero, de nuevo, comprenda que esto no elimina una columna o restricción que pueda existir de ejecuciones anteriores que ya no es necesaria.

En producción, a menudo es muy recomendable que none use none o simplemente no especifique esta propiedad. Esto se debe a que es una práctica común que los DBA revisen los scripts de migración para detectar cambios en la base de datos, especialmente si su base de datos se comparte entre múltiples servicios y aplicaciones.