Получение классов блоков сохранения состояния гибернации как из ORM, так и из OGM

Я пытаюсь использовать как hibernate orm, так и ogm в одном приложении. В моем persistence.xml у меня есть два persistence-unit:

<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">
    <persistence-unit name="orm-mysql">
        ...
        <class>...</class>
        ...
        <class>...</class>
        <exclude-unlisted-classes>true</exclude-unlisted-classes>
        ...
    </persistence-unit>
    <persistence-unit name="ogm-mongodb" transaction-type="JTA">
        ...
        <class>...</class>
        ...
        <class>...</class>
        <exclude-unlisted-classes>true</exclude-unlisted-classes>
        ...
    </persistence-unit>
    ...
</persistence>

Я хочу использовать нативный API hibernate orm как с orm, так и с ogm, поэтому мне нужно добавить аннотированные классы к двум разным MetadataSources.
Поскольку у меня есть единицы персистентности, я подумал, что смогу сделать это:

EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("orm-mysql");
Set<ManagedType<?>> managedTypes = entityManagerFactory.getMetamodel().getManagedTypes();
for (ManagedType type : managedTypes) {
    ormSources.addAnnotatedClass(type.getJavaType());
}

entityManagerFactory = Persistence.createEntityManagerFactory("ogm-mongo");
managedTypes = entityManagerFactory.getMetamodel().getManagedTypes();
for (ManagedType type : managedTypes) {
    ogmSources.addAnnotatedClass(type.getJavaType());
}

Проблема в том, что в первой итерации классов orm я получаю классы orm и ogm, которые включены в orm-mysql и ogm-mongo.
Во второй раз все в порядке, я получаю только классы ogm-mongo.

Не могу понять в чем дело, есть идеи?


person Nitzan Tomer    schedule 22.01.2016    source источник


Ответы (1)


На случай, если кто-то тоже совершит эту глупую ошибку, у меня было:

<persistence-unit name="orm-mysql">
    ...
    <class>...</class>
    <exclude-unlisted-classes>true</exclude-unlisted-classes>
    <properties>
        <property name="hibernate.archive.autodetection" value="class"/>
        ...
    </properties>
</persistence-unit>

Удаление свойства hibernate.archive.autodetection решило проблему.

person Nitzan Tomer    schedule 23.01.2016