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.