2011-04-08 9 views
8

Estoy tratando de obtener secuencias con entidades dinámicas para trabajar en EclipseLink y necesito ayuda.Secuencias con entidades dinámicas en EclipseLink

estoy definiendo mi entidad dinámica como la siguiente:

EntityManagerFactory emf = Persistence.createEntityManagerFactory("default"); 
    EntityManager em = emf.createEntityManager(); 

    Session session = JpaHelper.getEntityManager(em).getServerSession(); 
    DynamicClassLoader dcl = DynamicClassLoader.lookup(session); 

    Class<?> testClass = dcl.createDynamicClass("org.persistence.Test"); 

    JPADynamicTypeBuilder test = new JPADynamicTypeBuilder(testClass, null, "TEST"); 

    test.addDirectMapping("id", long.class, "T_ID"); 
    test.setPrimaryKeyFields("T_ID"); 
    test.addDirectMapping("col1", long.class, "T_COL1"); 
    test.addDirectMapping("col2", int.class, "T_COL2"); 
    test.addDirectMapping("col3", String.class, "T_COL3"); 
    test.addDirectMapping("col4", String.class, "T_COL4"); 
    test.addDirectMapping("col5", double.class, "T_COL5"); 
    test.addDirectMapping("col6", double.class, "T_COL6"); 

    DynamicHelper helper = new JPADynamicHelper(em); 
    helper.addTypes(true, true, test.getType()); 

me di cuenta de que todo es creado de acuerdo a la especificada. Intenté buscar documentación sobre cómo usar las secuencias de la base de datos y noté el método JPADynamicTypeBuilder.configureSecuencia (Secuencia, Cadena, Cadena). Pero no pude encontrar ningún ejemplo sobre cómo hacerlo. Jugueteé con este método y termino siempre con la estrategia de secuencia predeterminada, es decir, una tabla llamada SECUENCIA.

Intenté con una entidad precompilada usando @GeneratedValue y @SequenceGenerator y todo funciona bien, por lo que es algo que estoy haciendo mal con las entidades dinámicas.

¿Alguien sabe lo que podría estar haciendo mal?

Parece irrelevante, pero estoy diciendo de todos modos que mi base de datos es Oracle.

Gracias de antemano,

Rui

Respuesta

1

no tengo los detalles sobre su objeto de secuencia por lo que mi ejemplo es genérico, pero algo como lo siguiente debería funcionar:

test.configureSequencing(
     new NativeSequence("ORACLE_SEQ_OBJ", 1, 1), 
     "ORACLE_SEQ_OBJ", 
     "T_ID"); 
0

Puede utilice el método configureSequencing en JPADynamicTypeBuilder para establecer la secuencia.

He aquí un buen ejemplo: http://dev.eclipse.org/svnroot/rt/org.eclipse.persistence/branches/2.1/trunk/examples/jpa.employee/eclipselink.example.jpa.employee.dynamic/src/example/EmployeeDynamicMappings.java

Todavía estoy tratando de hacer que funcione con la secuenciación mesa, pero me da un error:

Exception [EclipseLink-41] (Eclipse Persistence Services - 2.4.0.v20120608-r11652): org.eclipse.persistence.exceptions.DescriptorException 
Exception Description: A non-read-only mapping must be defined for the sequence number field. 
Cuestiones relacionadas