2011-02-15 10 views
6

Estamos haciendo un proyecto en el que tenemos planeado usar JPA Persistence. Creemos que una vez que el proyecto se ponga en marcha, existe una pequeña posibilidad de que se requieran cambios en el modelo de datos.Estrategias para manejar actualizaciones en las clases de persistencia de JPA existentes

Mi pregunta es que cuáles son las diferentes estrategias disponibles para manejar dicho cambio. Particularmente tengo siguientes preguntas:

  1. Con clases JPA actualizados, ¿cuáles son las mejores prácticas para incorporarlas en el esquema de base de datos existente?

  2. Con JPA, ¿existen mejores prácticas para archivar datos antiguos, actualizar el esquema de la base de datos y migrar de nuevo la base de datos al nuevo esquema?

  3. ¿Cuáles son los diversos tipos de cambios (en términos generales) que harán imposible tal migración?

Respuesta

1

En RHQ (http://rhq-project.org/) tenemos algunas dbUtils que tienen una descripción del esquema de XML que sirve para rellenar el esquema inicial sobre una base de datos vacía y luego otro archivo XML que registra los cambios a este esquema de base como las diferenciaciones individuales " "de las declaraciones DDL y DML.

Cada vez que se cambia una clase JPA (en un esquema de manera relevante), se actualizan ambos archivos XML. En la siguiente ejecución del instalador, verá la base de datos existente, reunirá su versión y luego reproducirá todos los pasos de actualización desde la versión en el DB hasta la más reciente.

Este código dbutils está disponible in git.

Hay otros marcos como liquibase que pueden ayudarlo aquí.

1

También puede echar un vistazo a este marco: http://flywaydb.org

Se anuncia como: "El marco de la migración de bases de datos ágil para Java"

En mi experiencia, las migraciones no son el problema (hibernación puede hacerlas automáticamente), pero las reversiones son, si se trata de cambios destructivos. Por ejemplo, si elimina una columna, no hay forma de deshacer ese cambio, a menos que tenga una copia de seguridad de los datos de esa columna en algún lugar. La mejor manera en que dichas copias de seguridad probablemente dependen de su proveedor de base de datos.

Cuestiones relacionadas