我试图在同一个应用程序中同时使用休眠的 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>
我想将休眠 orm 本机 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 类的第一次迭代中,我得到了包含在orm-mysql
and中的 orm 和 ogm 类ogm-mongo
。
但是第二次很好,我只得到了ogm-mongo
课程。
无法弄清楚什么是错的,有什么想法吗?