Последовательности с динамическими объектами в EclipseLink - PullRequest
8 голосов
/ 08 апреля 2011

Я пытаюсь заставить последовательности с динамическими объектами работать в 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.

Заранее спасибо,

Руи

Ответы [ 2 ]

1 голос
/ 15 апреля 2011

У меня нет сведений о вашем объекте Sequence, поэтому мой пример является просто общим, но должно работать что-то вроде следующего:

test.configureSequencing(
      new NativeSequence("ORACLE_SEQ_OBJ", 1, 1),
      "ORACLE_SEQ_OBJ",
      "T_ID");
0 голосов
/ 12 ноября 2012

Вы можете использовать метод configureSequencing в JPADynamicTypeBuilder для установки последовательности.

Вот хороший пример: 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.
...