2011-05-13 9 views
6

Estamos utilizando JDO en uno de nuestros proyectos. Esto ha estado funcionando durante bastante tiempo y, naturalmente, tenemos que cambiar un poco el modelo.Campos de migración en JDO

¿Cuál es la mejor práctica al migrar campos en clases de entidad en JDO?

enum MyEnum { 
    REGULAR, 
    MYOLDTYPE // Delete this 
} 
@PersistenceCapable 
public class Entity { 
    @Persistent 
    MyEnum myEnumType; 
    @Persistent 
    String myString; // Rename this 

} 

Si elimino un valor de enumeración no será una excepción si ya está persistió cuando se carga de la base de datos, de cómo migrar esto?

Si me gustaría cambiar el nombre myString a myNewString, ¿cómo cambiar el nombre de la columna al nuevo nombre?

+0

Puede depender de su proveedor JDO. ¿La especificación de JDO especifica cómo se mapean las enumeraciones, o lo deja en manos del proveedor? –

+0

Estoy usando datanucleus. Las enumeraciones están mapeadas por nombre, hasta donde yo sé. – jontro

Respuesta

1

Primero, fíjese en su almacén de datos (¿RDBMS ?, ¿algo más?) Para ver si persiste como cadena o numérico.

Si cambia la enumeración continuación, usted es responsable de cualquiera

  1. migrar el contenido del almacén de datos

  2. cambiar la definición de enumeración de manera que Enum.valueOf (cadena) devuelve lo que quiere el viejo valor asignado a. Alternativamente, si persiste en RDBMS, haga uso de la extensión DataNucleus al pie de http://www.datanucleus.org/products/accessplatform_3_0/jdo/types.html donde define un método para obtener el valor de Enum para una cadena.

+0

Gracias! Esperaba que hubiera una forma estándar de migrar datos con JDO. – jontro