2015-01-15 3 views
1

독립적 인 Hibernate 인스턴스를 가진 여러 모듈 사용하기

부모 아래에 ModuleA와 ModuleB 모듈을 가진 다중 모듈 maven 프로젝트를 만들고 있습니다.IntelliJ의 별도 모듈로 인해 최대 절전 모드 매핑 오류가 발생합니까?

Hibernate는

이 모듈은 자신의 리소스 폴더에 자신의 Hibernate 매핑을 사용하십시오 MappingException을 던졌습니다. 각 모듈은 해당 모듈을 다른 모듈과 독립적으로 유지합니다. 지금은 모듈 A에서 모듈 B에서 클래스를 인스턴스화 할 때, 나는 필요한 모든 방법을 액세스 할 수 있지만 내가 응용 프로그램을 실행할 때, 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을 깨끗하게 실행하고 처음부터 모든 것을 컴파일했다. @Skizzo 제안한

또한 Modue (A)로부터의 pom.xml 모듈 B.

<dependency> 
     <groupId>org.example</groupId> 
     <artifactId>ModuleB</artifactId> 
     <version>1.0-SNAPSHOT</version> 
    </dependency> 

해결

에 종속되어, I는 각 모듈의 설정 파일을 변경. 원래 각 모듈에는 hibernate.cfg.xml이라는 Hibernate 구성 파일이 포함되어있었습니다. 두 모듈에서이 설정 파일의 이름을 변경했습니다. ModuleA의 설정 파일은 이제 hibernate.moduleA.cfg.xml이고 ModuleB의 설정 파일은 이제 hibernate.moduleB.cfg.xml

이라고 불린다. 각 모듈은 또한 세션 팩토리 초기화에 사용되는 HibernateUtil.java 클래스를 포함하고있다. 또한 각 모듈에 대한 HibernateUtil 클래스의 이름을 변경했습니다. ModuleA의 Util 클래스는 이제 HibernateUtilModuleA이라고하고 ModuleB의 Util 클래스는 HibernateUtilModuleB이라고합니다. 이제 Hibernate는 각 모듈에 대해 선택할 구성을 알 수있는 두 가지 구성 사이에 혼란이 없습니다.

HibernateUtilModuleA가 :

configuration.configure("hibernate.moduleA.cfg.xml"); 

가 HibernateUtilModuleB :

configuration.configure("hibernate.moduleB.cfg.xml"); 

ModuleA의 HibernateUtil과 클래스는 현재 약 보이는

그 다음이 같은 개별 구성 파일을로드하는 두 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; 
    } 
} 
+0

우리는 POM 파일 (부모 및 모듈 용)을 더 많이 볼 필요가 있다고 생각합니다. 제 3 자 종속성 비트는 필요하지 않지만이를자를 수 있습니다. 우리는이 모듈들이 항아리인지 또는 독립적 인 전쟁으로 패키지화되어 있는지 알아야하며, 이들 모듈 간의 관계 (의존성)를 알아야합니다. –

답변

1

나는 동일한 문제가있어서 복합 지속 장치으로 해결했지만, 제 경우에는 Jpa 구현 Composite Persistence Units과 같은 Eclipse 링크를 사용하고 있습니다. 이 link에서 최대 절전 모드에 대한 정보를 찾았습니다. 문제를 해결할 올바른 방법은 이것이라고 생각합니다.

+0

고마워요, 그 속임수를했습니다! Hibernate가 다른 설정을 구별 할 수없는 이유에 대한 설명이 있습니까? – Stefan

+0

@MightyApe 질문을 업데이트하고 솔루션에 대한 자세한 정보를 추가 할 수 있습니까? – Skizzo

+0

클래스 파일과 구성 파일의 이름 바꾸기에 대한 자세한 내용을 포함했습니다. 더 자세한 정보가 필요하십니까? 뭔가 빠졌습니까? – Stefan