从ORM和OGM获取hibernate持久性单元类

时间:2016-01-22 22:07:21

标签: mongodb hibernate orm hibernate-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>

我想将hibernate orm native api与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-mysqlogm-mongo中包含的orm和ogm类。 第二次,它很好,我只得到ogm-mongo类。

无法弄清楚哪些错误,有什么想法?

1 个答案:

答案 0 :(得分:0)

如果有人犯了这个愚蠢的错误,我有:

<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属性解决了问题。