0

同じアプリケーションで hibernate の orm と ogm の両方を使用しようとしています。私persistence.xmlには2つあり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>

orm と ogm の両方で休止状態の orm ネイティブ API を使用したいので、注釈付きのクラスを 2 つの異なる .xml に追加する必要があります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-mysql問題は、orm クラスの最初の繰り返しで、 andに含まれる orm クラスと ogm クラスの両方を取得することogm-mongoです。
2回目は問題ありませんが、ogm-mongoクラスのみを取得します。

何が悪いのかわからない、何かアイデアはありますか?

4

1 に答える 1

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と問題が解決しました。

于 2016-01-23T23:33:15.153 に答える