2011-01-19 3 views

답변

41

업데이트 : 스프링 3.1은 persistence.xml - 무료 JPA 구성을 지원합니다 (Spring 3.1 M2: Configuration Enhancements 참조).


실용적인 답은 좋지만 기술적으로는 정확하지 않습니다. - 독립형 환경, persistence.xml 지속성 공급자에 의해 구문 분석하는 것입니다

  • EntityManagerFactory createEntityManagerFactory(String emName, Map map) :

    PersistenceProvider는 두 개의 팩토리 메소드가 있습니다.

  • EntityManagerFactory createContainerEntityManagerFactory(PersistenceUnitInfo info, Map map)이 - 애플리케이션 서버 환경, persistence.xml는 응용 프로그램 서버에서 구문 분석하고 그 내용은 PersistenceUnitInfo로 전달됩니다.

스프링의 LocalContainerEntityManagerFactoryBean은 응용 프로그램 서버 환경을 에뮬레이션합니다. 따라서 persistence.xml 자체를 구문 분석하고 해당 내용을 응용 프로그램 컨텍스트의 값과 병합 한 다음 두 번째 팩토리 메서드를 사용하여 지속성 공급자에게 전달합니다.

그러나 persistence.xml 데이터를 얻는 과정은 구성 :

  • 당신은 persistenceXmlLocation 속성을 사용 persistence.xml 파일의 이름을 구성 할 수 있습니다 -이 응용 프로그램 서버의 기본 JPA 초기화 전략과의 충돌을 피하기 위해 유용합니다.

  • 사용자 정의 PersistenceUnitManager 전략을 설정하여 PersistenceUnitInfo의 출처를 완전히 무시할 수 있습니다. 이러한 관리자가 상자 밖으로 사용할 수 없습니다 불구하고

그래서, 실제로는 사용자 정의 PersistenceUnitManager를 작성하여 persistence.xml없이 봄에 JPA를 구성 할 수 있습니다.

+1

아주 좋은 대답인데, 나는이 날 동안 모든 표를 다 사용하지 않았다면 당신을 투표 할 것입니다. 나는 OP가 불필요하고 다소 복잡한 것처럼 봄을 파고 들지 않을 것이라고 생각했다. – darioo

+0

모든 설명에 대한 답변 +1을 주셔서 감사합니다. – user373201

7

persistence.xml이 필요합니다. 당신이 Hibernate를 직접 사용한다면, persistence.xml은 필요 없다.

+1

JPA 프로 바이더로서 Hibernate를 사용하는 Spring JPA가 persistence.xml 파일을 필요로하는 이유는 무엇입니까? – Suvasis

1

JPA 사양은 파일이 필요한 곳을 명시하지 않지만 EntityManagerFactory 및 EntityManager 계약의 정의와 실질적으로 전체 사양을 통해 persistence.xml 파일을 계속 언급합니다.

최근 persistence.xml을 사용하지 않고 Hibernate 3.6으로 JPA 2.0을 프로그래밍 방식으로 구성 할 수 있는지 여부에 대한 질문을 처리해야했습니다.

최소한의 구성 만 포함하도록 파일을 구성 할 수 있지만이 작업은 불가능하다고 결론을 내 렸습니다. 파일에 적어도 지속성 단위의 이름이 포함되어야한다고 결정했습니다. 나머지 정보는 프로그래밍 방식으로 매개 변수로 엔티티 관리자 팩토리에 제공 될 수 있습니다.

나는이 문제를 극복하기 위해 어떤 트릭을 사용하는지 잘 모르겠다.

관련 문제