2010-04-17 4 views
3

Spring 3.0.2, Hibernate 3.5.1, JPA 2 및 Derby를 사용하는 Tomcat에서 매우 간단한 웹 응용 프로그램을 실행하고 있습니다. 난 내 데이터베이스 연결을 모두 persistence.xml에 정의하고 있는데, 단지 의존성 주입을 위해 Spring을 사용하고있다. 임베디드 Derby를 데이터베이스로 사용하고 있습니다. 나뿐만 따라서 JPA2 표준화 특성에 내 구성을 전환 할 때Hibernate가 persistence.xml의 JPA2 표준화 된 속성을 무시하는 이유는 무엇입니까?

<property name="hibernate.connection.driver_class" value="org.apache.derby.jdbc.EmbeddedDriver"/> 
<property name="hibernate.connection.url" value="jdbc:derby:webdb;create=true"/> 

문제점이 발생합니다 : 나뿐만 따라서 고전 최대 절전 모드 방식으로 persistence.xml에 드라이버 및 URL 속성을 정의 할 때

모든 것이 제대로 작동

<property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.EmbeddedDriver"/> 
<property name="javax.persistence.jdbc.url" value="jdbc:derby:webdb;create=true"/> 

JPA2 속성 키를 사용하여, 다음과 같은 예외 하드 응용 프로그램 보석금 :

,

왜 이것이 실패하고 있는지 아는 사람이 있습니까?

참고 : Hibernate 참조 문서에서 곧바로 javax ... 속성 문자열을 복사했기 때문에 오타가 발생할 가능성이 거의 없습니다.

답변

3

대답은 이것이 스프링 문제이며, 아마도 LocalContainerEntityManagerFactoryBean의 사용으로 인해 발생하는 것 같습니다. Spring을 사용하여 표준 Java SE 방식으로 EntityManager를 수동으로 초기화하는 대신 @PersistenceContext 주석을 사용할 수 있도록했습니다. @PersistenceContextPersistence.createEntityManagerFactory("WebApp").createEntityManager();으로 바꿨을 때 (그리고 스프링 구성에서 EntityManager에 대한 주석을 달았습니다.) 모든 것이 예상대로 작동했습니다. 참고로

이 내가 사용하던 봄 구성했다 :

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:tx="http://www.springframework.org/schema/tx" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
      http://www.springframework.org/schema/beans/spring-beans.xsd 
      http://www.springframework.org/schema/context 
      http://www.springframework.org/schema/context/spring-context.xsd 
      http://www.springframework.org/schema/tx 
      http://www.springframework.org/schema/tx/spring-tx.xsd"> 

    <context:component-scan base-package="net.webapp"/> 
    <tx:annotation-driven/> 

    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"/> 

    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 
      <property name="entityManagerFactory" ref="entityManagerFactory"/> 
    </bean> 
</beans> 
2

재생할 수 없습니다 (저는 스프링을 사용하지 않습니다). 여기 내 persistence.xml이며, 그것은 나를 위해 작동 :

<?xml version="1.0" encoding="UTF-8"?> 
<persistence 
    xmlns="http://java.sun.com/xml/ns/persistence" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" 
    version="2.0"> 

    <persistence-unit name="PetstorePu" transaction-type="RESOURCE_LOCAL"> 

    <properties> 
     <property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.EmbeddedDriver"/> 
     <property name="javax.persistence.jdbc.url" value="jdbc:derby:webdb;create=true"/> 

     <property name="hibernate.show_sql" value="true"/> 
     <property name="hibernate.hbm2ddl.auto" value="update"/> 
    </properties> 
    </persistence-unit> 
</persistence> 

그냥 경우에, 여기 내가 사용 받는다는으로 종속되어 있습니다 : 아래

<!-- JPA2 provider --> 
<dependency> 
    <groupId>org.hibernate</groupId> 
    <artifactId>hibernate-entitymanager</artifactId> 
    <version>3.5.1-Final</version> 
</dependency> 
<!-- Logging --> 
<dependency> 
    <groupId>org.slf4j</groupId> 
    <artifactId>slf4j-simple</artifactId> 
    <version>1.5.10</version> 
</dependency> 
<!-- JDBC driver --> 
<dependency> 
    <groupId>org.apache.derby</groupId> 
    <artifactId>derby</artifactId> 
    <version>10.5.3.0_1</version> 
</dependency> 

내 클래스 경로 :

alt text http://img263.imageshack.us/img263/8095/screenshot006qt.png

+0

감사를 다음 제공해야 공급자에 대한 그래서 최대 절전 모드 및 PostgreSQL을

과 같은 문제에 직면했다, 그것은 나를 넣어 내 질문에 대답하기위한 올바른 길. – Ophidian

2

당신이 메이븐 의존성을 사용하여 클래스 경로 설정 만 사용 일식하지 않는 경우, 당신은 최대 절전 모드에서 클래스 경로에 위의 jar 파일을 둘 필요 3.5

1) 상기 코어 항아리

2 동면) 주석

3) 보스 로깅 J 항아리 동면 AR

4) 엔티티 관리자에게 단지

JPA API 2. 항아리 (동면의) 동면 분포에 포함.

비슷한 문제가있어서이 방법을 사용하여 효과적이었습니다. 배포본의 동일한 버전에서 모든 depedent jar를 얻는 것이 가장 좋은 방법입니다.어떤 오류라도 발견하면 로그에서 찾아서 항아리를 클래스 패스에 넣을 수 있습니다.

1

나는 이것이 공급자 클래스와 관련된 문제라고 생각합니다. 요소에는 공급 업체별 설정을 지정하는 데 사용되는 중첩 요소가 들어 있습니다. 벤더에 의해 나는 공급자으로 지정된 클래스를 의미합니다. 따라서 제공자 속성이 좋습니다. 내가

<provider>org.hibernate.ejb.HibernatePersistence</provider> 

내가 독립적 인 검증의 persistence.xml에

<property name="hibernate.connection.driver_class" value="org.postgresql.Driver"/> 
    <property name="hibernate.connection.url" value="jdbc:postgresql://localhost:5432/reverseepg-foxtel"/> 
    <property name="hibernate.connection.username" value="postgres"/> 
    <property name="hibernate.connection.password" value="password"/> 

    If I provide below properties it doesn't work 

    <property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver"/> 
    <property name="javax.persistence.jdbc.url" value="jdbc:postgresql://localhost:5432/reverseepg-foxtel"/> 
    <property name="javax.persistence.jdbc.user" value="postgres"/> 
    <property name="javax.persistence.jdbc.password" value="password"/> 
+0

Hibernate 4.1 및 Oracle과 동일합니다. 최대 절전 모드 특정 등록 정보를 지정하면 JPA 등록 정보가 무시 된 것 같습니다. 그것을 추적 할 기분이 아닙니다 ... – mmey

관련 문제