2011-04-08 50 views
8

我在使用動態實體獲取序列以在EclipseLink中工作,我需要一些幫助。在EclipseLink中使用動態實體的序列

我定義我的動態實體類似如下:

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

我注意到,一切都按照指定的創建。我試圖尋找一些文檔如何使用數據庫序列,我注意到了JPADynamicTypeBuilder.configureSequencing(Sequence,String,String)方法。但是我找不到如何去做的例子。我玩弄了這種方法,並總是使用默認的排序策略,即一個名爲SEQUENCE的表。

我試着用預編譯的實體使用@GeneratedValue和@SequenceGenerator,一切正常,所以這是我做錯了動態實體的東西。

有誰知道我可能做錯了什麼?

這似乎並不重要,但我總是告訴我的數據庫是Oracle。

由於提前,

回答

1

我沒有你的序列對象的細節,所以我的例子就是通用的,但像下面應該工作:

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

你可以使用JPADynamicTypeBuilder上的configureSequencing方法來設置序列。

這裏有一個很好的例子: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

我還在努力使其與臺測序工作,但它給我一個錯誤:

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. 
相關問題