2011-04-08 4 views
8

J'essaie d'obtenir des séquences avec des entités dynamiques pour fonctionner dans EclipseLink et j'ai besoin d'aide.Séquences avec des entités dynamiques dans EclipseLink

Je définir mon entité dynamique comme ce qui suit:

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()); 

je remarquai que tout est créé selon le spécifié. J'ai essayé de chercher de la documentation sur comment utiliser les séquences de base de données et j'ai remarqué la méthode JPADynamicTypeBuilder.configureSequencing (Sequence, String, String). Mais je n'ai pas trouvé d'exemple sur la façon de le faire. J'ai joué avec cette méthode et je termine toujours avec la stratégie de séquençage par défaut, c'est-à-dire une table nommée SEQUENCE.

J'ai essayé avec une entité précompilée en utilisant @GeneratedValue et @SequenceGenerator et tout fonctionne bien, donc c'est quelque chose que je fais mal avec les entités dynamiques.

Est-ce que quelqu'un sait ce que j'ai pu faire de mal?

Cela ne semble pas pertinent, mais je dis quand même que ma base de données est Oracle.

Merci à l'avance,

Rui

Répondre

1

Je n'ai pas les détails sur votre objet séquence si mon exemple est juste générique, mais quelque chose comme ce qui suit devrait fonctionner:

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

Vous pouvez Utilisez la méthode configureSequencing sur le JPADynamicTypeBuilder pour définir la séquence.

Voici un bon exemple: 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

Je suis encore en train de le faire fonctionner avec Séquençage de table, mais il me donne une erreur:

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. 
Questions connexes