使用幾個模塊與獨立的休眠實例
我正在創建一個多模塊Maven項目,其模塊ModuleA和ModuleB下面的父級。由於IntelliJ中的獨立模塊導致Hibernate映射錯誤?
休眠拋出一個MappingException
模塊使用自己的Hibernate映射有自己的資源文件夾。每個模塊獨立於其他模塊保持其對象。現在,當我嘗試實例從模塊B模塊A中的類,我可以訪問所有需要的方法,但是當我執行應用程序時,Hibernate拋出這個錯誤:
Exception in thread "main" org.hibernate.MappingException: Unknown entity: org.example.ModuleB.Person
at org.hibernate.internal.SessionFactoryImpl.getEntityPersister(SessionFactoryImpl.java:1096)
at org.hibernate.internal.SessionImpl.getEntityPersister(SessionImpl.java:1443)
at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:116)
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:209)
at org.hibernate.event.internal.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:55)
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:194)
at org.hibernate.event.internal.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:49)
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90)
at org.hibernate.internal.SessionImpl.fireSave(SessionImpl.java:715)
at org.hibernate.internal.SessionImpl.save(SessionImpl.java:707)
at org.hibernate.internal.SessionImpl.save(SessionImpl.java:702)
我可以添加映射類從ModuleB另外添加到模塊A的Hibernate配置文件中。然後運行。但這不是應該如何工作,因爲每個模塊都應該是獨立的。它理論上可以存儲在完全不同的RDBMS中。
更多的背景
本來我只用了只有一個模塊,將其分割它,並希望有更distangled。我執行mvn clean並從頭開始編譯所有內容。
另外從Modue甲pom.xml中對模塊B.
<dependency>
<groupId>org.example</groupId>
<artifactId>ModuleB</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
解
的依賴所提議的@Skizzo,我剛改名爲每個模塊的配置文件。最初,每個模塊都包含一個名爲hibernate.cfg.xml
的Hibernate配置文件。我在兩個模塊中重命名了這些配置文件。 ModuleA的配置文件現在稱爲hibernate.moduleA.cfg.xml
,ModuleB的配置文件現在稱爲hibernate.moduleB.cfg.xml
每個模塊還包含一個用於初始化Session Factory的HibernateUtil.java類。我也爲每個模塊重新命名了HibernateUtil類。 ModuleA的Util類現在稱爲HibernateUtilModuleA
,而ModuleB的Util類稱爲HibernateUtilModuleB
。現在,兩種配置之間沒有混淆可能,Hibernate現在知道爲每個模塊選擇哪種配置。
然後我適應兩個的HibernateUtil類加載單獨的配置文件是這樣的:
HibernateUtilModuleA:
configuration.configure("hibernate.moduleA.cfg.xml");
HibernateUtilModuleB:
configuration.configure("hibernate.moduleB.cfg.xml");
爲ModuleA HibernateUtil類現在看起來大致像這樣:
/**
* Hibernate session management
*/
public class HibernateUtilModuleA {
private static SessionFactory sessionFactory;
private static ServiceRegistry serviceRegistry;
static {
try {
Configuration configuration = new Configuration();
configuration.configure("hibernate.ModuleA.cfg.xml");
serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
} catch (HibernateException he) {
System.err.println("Error creating Session: " + he);
throw new ExceptionInInitializerError(he);
}
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
}
我認爲我們需要看到更多的POM文件(對於父級和模塊) - 儘管我們不需要第三方依賴性位,所以可以截斷它們。我們需要知道這些模塊是罐子還是打包成獨立的戰爭,我們需要知道它們之間的關係(依賴關係)。 – 2015-01-15 17:57:27