2011-07-05 4 views
0

Eclipse에서 개발 한 Java/Spring/Hibernate 기반 웹 응용 프로그램에서 작업하고 있습니다.최대 절전 모드 엔티티를 외부화하는 방법은 무엇입니까?

이 웹 응용 프로그램은 실제로 각각의 Hibernate 저장소 클래스뿐만 아니라 몇 개의 Hibernate 엔티티 클래스를 복제하는 두 개의 다른 프로젝트입니다. 중복 된 코드를 외부 JAR 파일이나 다른 것으로 옮기는 것이 좋을 것입니다.

Hibernate 문서에서 엔터티 클래스를 persistence.xml 파일이 들어있는 새 JAVA 프로젝트에 넣어야한다고 알고 있습니다. 또한이 프로젝트를 JAR로 내보내고이를 내 메인 프로젝트의 클래스 경로에 포함시킬 수 있음을 알고 있습니다. 또한, 내 기본 프로젝트에서 내 hibernate.cfg.xml에서이 JAR을 참조하기로되어 있음을 알고 있습니다.

나는 지금 당장 작업중인 프로젝트로는 그렇게 단순하지 않은 것 같습니다. 내가 너무 최대 절전 모드 저장소 클래스이를 포함시킬 수, 공유 코드를 보유하고 내 외부 프로젝트

  1. :

    여기에 질문입니까? 실제로 실현되어야한다면 persistence.xml에 어떻게 표시해야합니까?

  2. 내 외부 JAR에서 얼마나 작은 것이 persistence.xml 일 수 있습니까? 예를 들어, 메인 프로젝트는 이미 동면 자국어를 구성하고 있으므로,이 외부 JAR의 persistence.xml에서 빠져 나갈 수 있습니까?

  3. 하이버 네이트 문서에서, hibernate.cfg.xml<jar-file> 태그를 사용하여 외부 JAR 파일을 참조 할 수 있다는 것을 알고 있습니다. 그렇다면 프로젝트에 hibernate.cfg.xml이 없으면 어떻게 될까요? org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBeanannotatedClasses 속성을 제공하는 Spring 용 구성 XML이 있습니다. 난 AnnotationSessionFactoryBean와 외부 JAR 파일을 참조하는 예제를 찾는 많은 행운이 아니에요.

나는이 사이트에서 검색을 시도했지만 비슷한 것을 아직 찾지 못했습니다. 이 게시물이 중복되거나 어리석은 분명한 질문 인 경우 죄송합니다. 사전 :)에서

감사

편집 :

OK, 내가 궁극적으로 내 클래스 경로에 "MY_TEST.jar", 추가 "MY_TEST.jar" 하나가 주석하고있다 랬를 포함 시켰습니다 상정되어 알아야 할 것 같습니다 있도록 Hibernate 클래스 : src.shared.myEntity.java

아래의 Spring 구성 발췌 부분을 참조하여이 엔티티 클래스를 어떻게 참조 할 수 있습니까? Hibernate는 저장소의 개념이없는

<bean id="my.postgres.sessionFactory" 
     class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> 

    <property name="dataSource" 
     ref="my.postgres.dataSource" /> 

    <property name="annotatedClasses"> 
     <list> 
     <value>src.app.EntityA</value> 
     <value>src.app.EntityB</value> 
     </list> 
    </property> 
    ......... 
</bean> 

답변

0

(꽤 많이 아무리 내가 무엇을하려고 IllegalArgumentException: Cannot find class을 받고 없습니다 유지). 봄 않습니다.

Hibernate는 영속 엔티티 클래스가 어디에 있는지 상관하지 않는다. 클래스 패스에 있어야합니다 ( ). 둘 중 어느 것이 든 하나가 되어도 두 개, 개 또는 세 개의 병은 이러한 모든 병이 클래스 경로에있는 경우 중요하지 않습니다.

원하는대로 프로젝트를 구성하고 클래스 패스에 두 개의 다른 최대 절전 모드 구성 파일이 없는지 확인하십시오. 프로젝트를 사용하여 모든 공통 엔티티와 관련 리포지토리를 보유하고 메인 프로젝트가 최대 절전 모드 구성 파일을 정의하도록 할 수 있습니다.

<property name="annotatedClasses"> 
    <list> 
    ... 
    <value>src.shared.myEntity</value> 
    </list> 
</property> 

귀하의 문구가 혼란, 그래서 내가 생각을 확인할 수 있습니다 :

공유 클래스 정규화 된 이름이 src.shared.myEntity 인 경우, 는 스프링 설정은 다음 줄이 있어야합니다 분명한 것은 이지만 아마도 그렇지 않습니다. 클래스의 정규화 된 이름은 전체 패키지 이름 다음에 클래스 이름 (.class 또는 .java 확장자가없는 )이옵니다. .java 파일에는 .class 파일 이 들어 있지 않아야합니다. jar에있는 디렉토리의 계층 구조는 패키지의 계층을 정확히 매핑해야합니다. 그래서 당신의 기업은 다음과 같다 경우 : 루트에서

package src.shared; 

@Entity 
public class myEntity { 
    // ... 
} 

항아리가 있어야한다, , src 디렉토리, 가 가 myEntity.class 파일을 포함하는 shared 디렉토리를 포함.

추 신 : 루트 패키지 이름이 src 인 것은 정말 이상합니다. ...?

PPS : 클래스 이름은 대문자 ( MyEntity)로 시작해야하며 myEntity이 아니어야합니다.

+0

안녕하세요. 빠른 답변을 보내 주셔서 감사합니다. 죄송합니다. 저장소에 대해 미루고 있습니다. 내 클래스 패스에 내 외부 항아리가 있지만 Spring 구성에서 AnnotationSessionFactoryBean 속성을 사용하여 참조하는 데 문제가 있습니다. 다시, Hibernate 문서는 hibernate.cfg.xml 파일로 이것이 어떻게 이루어 졌는지에 대한 분명한 예를 보여주고 있지만, 원래 프로젝트 설계자는 이것을 포함하지 않고 Spring의 설정을 통해 모든 것을 설정하기로 결정했다. 모든 것이 컴파일되지만 스프링은 외부 엔티티 클래스를 찾을 수 없다. – Langecrew

+0

그런 다음 문제가있는 스프링 구성을 표시하고 어떤 예외가 발생하는지 알려준다 (스택 추적). 그러나 봄은 항아리에 대해서도 신경 쓰지 않습니다. 어떤 클래스가 클래스 패스에 있다면, 그것을 찾을 것입니다. –

+0

내 원래 게시물을 편집하여 게시했습니다. – Langecrew