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