java - manytomany - jpa many to many with extra column
¿Soporte de JPA/Hibernate para la migración? (3)
Tal vez deba introducir nuevas entidades, eliminarlas o simplemente cambiar los tipos de propiedades en una entidad.
No tengo ninguna experiencia con él, pero Liquibase proporciona cierta integración de Hibernate y puede comparar sus asignaciones con una base de datos y generar el registro de cambios apropiado:
La integración LiquiBase-Hibernate registra los cambios en la base de datos requeridos por su asignación actual de Hibernate a un archivo de registro de cambios que luego puede inspeccionar y modificar según sea necesario antes de ejecutar.
Todavía estoy buscando una oportunidad para jugar con él y encontrar algunas respuestas a mis preguntas pendientes:
- ¿Funciona cuando se usan anotaciones?
- ¿Requiere un archivo
hibernate.cfg.xml
(aunque esto no sería un gran impedimento)?
Actualización: Ok, ambas preguntas están cubiertas por Nathan Voxland en esta respuesta y las respuestas son:
- sí funciona cuando se usan anotaciones
- sí , requiere un hibernate.cfg.xml (por ahora)
Actualmente estoy trabajando en una aplicación de escritorio utilizando JPA / Hibernate para conservar los datos en una base de datos H2. Tengo curiosidad sobre cuáles son mis opciones si necesito realizar cambios en el esquema de la base de datos en el futuro por alguna razón. Tal vez deba introducir nuevas entidades, eliminarlas o simplemente cambiar los tipos de propiedades en una entidad.
- ¿Hay soporte en JPA / Hibernate para hacer esto?
- ¿Tendría que escribir manualmente una solución?
Hay dos opciones:
- db-to-hibernate - refleje los cambios de la base de datos en sus entidades manualmente. Esto significa que tu DB es "líder"
- hibernate-to-db: use
hibernate.hbm2ddl.auto=update
, o cambie manualmente la base de datos después de cambiar su entidad: aquí su modelo de objetos es "líder"
Por lo general, permito que Hibernate genere el DDL durante el desarrollo y luego creo un script de migración de SQL manual cuando lo implemento en el servidor de prueba (que luego uso también para UAT y servidores en vivo).
La generación de DDL en Hibernate no ofrece soporte para la migración de datos, si solo hace tanto como agregar un campo que no sea nulo, la generación de DDL no puede ayudarlo.
Todavía tengo que encontrar cualquier abstracción de migración verdaderamente útil para ayudar con esto.
Hay una serie de bibliotecas (mire esta pregunta SO para ver algunos ejemplos), pero cuando está haciendo algo como dividir una entidad existente en una jerarquía usando herencia unida, siempre vuelve a SQL simple.