복붙노트

[SPRING] Hibernate 4.3.0.Final & Spring 데이터 JPA 1.4.3.RELEASE

SPRING

Hibernate 4.3.0.Final & Spring 데이터 JPA 1.4.3.RELEASE

처음으로 스프링 데이터를 설정하고 사용하려고했습니다. 당연히 최신 버전 (Spring Data JPA 1.4.3.RELEASE & Hibernate 4.3.0.Final)을 사용하고 싶을 것입니다. 예제를 온라인으로 구성한 후 응용 프로그램에서 예외가 발생했습니다.

 <dependency>
   <groupId>org.springframework.data</groupId>
   <artifactId>spring-data-jpa</artifactId>
   <version>1.4.3.RELEASE</version>
 </dependency>
 <dependency>
   <groupId>org.hibernate</groupId>
   <artifactId>hibernate-core</artifactId>
   <version>Hibernate 4.3.0.Final</version>
   <exclusions>
     <exclusion>
       <artifactId>commons-collections</artifactId>
       <groupId>commons-collections</groupId>
     </exclusion>
   </exclusions>
 </dependency>
 <dependency>
   <groupId>org.hibernate</groupId>
   <artifactId>hibernate-search</artifactId>
   <version>4.4.2.Final</version>
   <exclusions>
     <exclusion>
       <groupId>org.hibernate</groupId>
       <artifactId>hibernate-core</artifactId>
     </exclusion>
   </exclusions>
 </dependency>

이것은 오류 / 예외입니다.

 Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [test-service-persistance-application-context.xml]: Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: javax.persistence.Table.indexes()[Ljavax/persistence/Index;
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1553)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:539)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:304)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:300)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:195)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:973)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:750)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:482)
at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:121)
at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:60)
at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:100)
at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:250)
at org.springframework.test.context.CacheAwareContextLoaderDelegate.loadContextInternal(CacheAwareContextLoaderDelegate.java:64)
at org.springframework.test.context.CacheAwareContextLoaderDelegate.loadContext(CacheAwareContextLoaderDelegate.java:91)
... 31 more

 Caused by: java.lang.NoSuchMethodError: javax.persistence.Table.indexes()[Ljavax/persistence/Index;
at org.hibernate.cfg.annotations.EntityBinder.processComplementaryTableDefinitions(EntityBinder.java:936)
at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:781)
at org.hibernate.cfg.Configuration$MetadataSourceQueue.processAnnotatedClassesQueue(Configuration.java:3762)
at org.hibernate.cfg.Configuration$MetadataSourceQueue.processMetadata(Configuration.java:3716)
at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1410)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1844)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:850)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:843)
at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.withTccl(ClassLoaderServiceImpl.java:399)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:842)
at org.hibernate.jpa.HibernatePersistenceProvider.createContainerEntityManagerFactory(HibernatePersistenceProvider.java:150)
at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:67)
at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:318)
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:318)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1612)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1549)
... 46 more

나는이 구성을 작동시키지 못했습니다. 내가 찾은 유일한 해결책은 Hibernate를 버전 4.2.8로 되돌리기였다. 최종

해결법

  1. ==============================

    1.classpath에는 분명히 JPA 2.0과 JPA 2.1 JAR이 모두 포함되어 있으며, JAR이 먼저 발견되어 Hiberate가 실패하게 만듭니다. 나열된 종속성 선언에서 왜 Spring Data JPA 1.4.3이 확실히 그걸 가져 오지 않는지 확실하지 않습니다.

    classpath에는 분명히 JPA 2.0과 JPA 2.1 JAR이 모두 포함되어 있으며, JAR이 먼저 발견되어 Hiberate가 실패하게 만듭니다. 나열된 종속성 선언에서 왜 Spring Data JPA 1.4.3이 확실히 그걸 가져 오지 않는지 확실하지 않습니다.

    따라서 mvn 의존성을 시도하는 것이 좋습니다 : tree와 JPA 2.0 JAR을 찾고 실제로 transitively에 의존합니다. (어쩌면 로컬로 선언했을 수도 있습니다). 여전히 문제가있는 경우 Maven 명령의 결과를 질문에 추가하십시오.

  2. ==============================

    2.Jboss 웹 서버를 사용한다면, pom.xml에서 hibernate-jpa-2.0-api를 제외 시키길 원할 것입니다. 예를 들면 다음과 같습니다 :

    Jboss 웹 서버를 사용한다면, pom.xml에서 hibernate-jpa-2.0-api를 제외 시키길 원할 것입니다. 예를 들면 다음과 같습니다 :

    <dependency>
       <groupId>org.jboss.spec</groupId>
       <artifactId>jboss-javaee-6.0</artifactId>
       <version>1.0.0.Final</version>
       <type>pom</type>
       <scope>provided</scope>
       <exclusions>
          <exclusion>
             <groupId>org.hibernate.javax.persistence</groupId>
             <artifactId>hibernate-jpa-2.0-api</artifactId>
          </exclusion>
       </exclusions>
    </dependency>
    

    그리고 pom.xml에 hibernate-jpa-2.1-api 의존성을 추가하십시오. 예를 들면 다음과 같습니다 :

     <dependency>
        <groupId>org.hibernate.javax.persistence</groupId>
        <artifactId>hibernate-jpa-2.1-api</artifactId>
        <version>1.0.0.Final</version>
     </dependency>
    

    최종 참고 사항 : 스택 트레이스를 읽으면 엔티티 중 일부가 @Table 주석에서이 속성을 사용하기 때문에 쿼리가 오류의 원인이 아니며 EntityManagerFactory가 만들어 질 때 발생합니다. 속성 사용을 삭제하거나 라이브러리를 JPA 2.1로 이동하십시오.

    또한 JBoss에서 jpa 하위 시스템을 제외해야하며 다음과 같이하고 싶습니다.

    -즐겨!

  3. ==============================

    3.

        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-jpa</artifactId>
            <version>${spring-data.version}</version>
            <exclusions>
                <exclusion>
                    <groupId>org.hibernate.javax.persistence</groupId>
                    <artifactId>hibernate-jpa-2.0-api</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    
  4. ==============================

    4.eclipse를 사용하는 경우, eclipse에서 pom.xml을 열고 종속성 계층 구조 탭으로 이동하여 전이 종속성으로 선택된 jar와 구성한 jar를 확인할 수 있습니다. 전 이적 의존성을 선택하고 현재 지정된 종속성 / OR을 제거해야합니다. 그렇지 않으면 전이 종속성을 제외해야합니다.

    eclipse를 사용하는 경우, eclipse에서 pom.xml을 열고 종속성 계층 구조 탭으로 이동하여 전이 종속성으로 선택된 jar와 구성한 jar를 확인할 수 있습니다. 전 이적 의존성을 선택하고 현재 지정된 종속성 / OR을 제거해야합니다. 그렇지 않으면 전이 종속성을 제외해야합니다.

  5. ==============================

    5.나는 사용했다.

    나는 사용했다.

    compile 'org.hibernate.javax.persistence : hibernate-jpa-2.1-api : 1.0.0.Final'

    그것을 해결하기 위해.

  6. ==============================

    6.우리도 같은 문제에 직면했습니다. Spring과 Hibernate 4.3.10.FINAL을 JBoss 7.1.3과 함께 사용하는 웹 어플리케이션이 있습니다. Hibernate는 JPA 2.1과 JBoss with JPA 2.0을 제공합니다. 두 개는 앱을 배포 할 때 충돌이 발생했습니다. 당신은 많은 해결책을 가지고 있습니다. 다른 사람들이 말했듯이 jboss (jboss / modules / javax / persistence / api / main)의 modules 디렉토리에 원하는 hibernate-jpa jar 버전을 넣고 modules.xml을 좋은 버전으로 업데이트 할 수 있습니다. 다른 솔루션 (우리가 선택한 것)은 Jboss JPA가 배포 할 때 JBoss에 의해 암시 적으로로드되지 않도록하는 것입니다. 이 경우 WEB-INF 폴더에 jboss-deployment-structure.xml이라는 파일을 만들어야합니다. 다음과 같은 예외를 추가하십시오.

    우리도 같은 문제에 직면했습니다. Spring과 Hibernate 4.3.10.FINAL을 JBoss 7.1.3과 함께 사용하는 웹 어플리케이션이 있습니다. Hibernate는 JPA 2.1과 JBoss with JPA 2.0을 제공합니다. 두 개는 앱을 배포 할 때 충돌이 발생했습니다. 당신은 많은 해결책을 가지고 있습니다. 다른 사람들이 말했듯이 jboss (jboss / modules / javax / persistence / api / main)의 modules 디렉토리에 원하는 hibernate-jpa jar 버전을 넣고 modules.xml을 좋은 버전으로 업데이트 할 수 있습니다. 다른 솔루션 (우리가 선택한 것)은 Jboss JPA가 배포 할 때 JBoss에 의해 암시 적으로로드되지 않도록하는 것입니다. 이 경우 WEB-INF 폴더에 jboss-deployment-structure.xml이라는 파일을 만들어야합니다. 다음과 같은 예외를 추가하십시오.

    <?xml version="1.0" encoding="UTF-8"?>
    <jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2">
    <deployment>    
    <exclude-subsystems>
    <subsystem name="jpa" />
    </exclude-subsystems>
    <exclusions>
    <module name="javaee.api" />
    </exclusions>
    </deployment>
    </jboss-deployment-structure>
    
  7. ==============================

    7.JBoss EAP 6.4, JPA 2.1, Spring Boot 1.4.1, Spring Data 1.10.3, Hibernate 5.0.11에서 같은 문제가 발생하면, 이것이 저에게 효과적이었습니다.

    JBoss EAP 6.4, JPA 2.1, Spring Boot 1.4.1, Spring Data 1.10.3, Hibernate 5.0.11에서 같은 문제가 발생하면, 이것이 저에게 효과적이었습니다.

    /WEB-INF/jboss-deployment-structure.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2">
        <deployment>
            <exclude-subsystems>
                <subsystem name="jpa" />
            </exclude-subsystems>
            <exclusions>
                <module name="javaee.api" />
                <module name="org.jboss.logging"/>
            </exclusions>
        </deployment>
    </jboss-deployment-structure>
    

    Ahmad의 대답에 대한 찬사, org.jboss.logging에 대한 예외 만 추가됨

  8. from https://stackoverflow.com/questions/21157123/hibernate-4-3-0-final-spring-data-jpa-1-4-3-release by cc-by-sa and MIT license