2012-05-07 3 views
4

저는 ORM을 관리하기 위해 Spring-Data-JPA 1.0.3.RELEASE를 사용하고 있습니다.스프링 데이터 JPA는 "NoSuchMethodError"를 반환합니다.

내의 persistence.xml은 다음과 같습니다

@Transactional(readOnly = true) 
public interface OrderRepository extends JpaRepository<Order, Long> { 
//my stuff 
} 

하고 내가 그것을 사용하고 있습니다 :

<persistence> 
    <persistence-unit name="default" transaction-type="JTA"> 
     <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider> 
     <jta-data-source>jdbc/myDataSource</jta-data-source> 
     <properties> 
      <property name="openjpa.TransactionMode" value="managed" /> 
      <property name="openjpa.ConnectionFactoryMode" value="managed" /> 
      <property name="openjpa.jdbc.DBDictionary" value="db2" /> 
     </properties> 
    </persistence-unit> 
</persistence> 

의 ApplicationContext 내 OrderRepo 인터페이스는 다음과 같습니다이

<beans> 
<context:annotation-config /> 
<bean id="myExceptionTranslator" class="org.springframework.orm.jpa.DefaultJpaDialect" /> 

<bean id="myEmf" class="javax.persistence.Persistence" factory-method="createEntityManagerFactory"> 
     <constructor-arg type="java.lang.String" value="default" /> 
</bean> 
    <jpa:repositories base-package="model.repositories" /> 
    <tx:annotation-driven transaction-manager="txManager" /> 
    <bean 
     class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" /> 
</beans> 

처럼 보인다 내 서비스 등급 내에서 이렇게.

@Autowired 
private OrderRepository repository; 

그러나 스피어만큼이 같은 dosn't처럼 보이는 날이 오류 제공 :

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'orderService': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private model.repositories.OrderRepository model.service.OrderService.repository; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'orderRepository': FactoryBean threw exception on object creation; nested exception is java.lang.NoSuchMethodError: javax/persistence/EntityManager.getMetamodel()Ljavax/persistence/metamodel/Metamodel; 

이 문제에 대해 내가 발견하는 유일한 ressource 이전 봄 - 데이터 - JPA 버전의 오류를 지적를 이는 스프링 데이터 커먼즈 항아리에 대한 잘못된 종속성을 사용하여 오류로 표시됩니다. 그러나 나는 데이터 커먼스 버전이 좋을 수 있도록이를 남기고 있습니다. 또한 스프링 데이터 JPA는 JPA 2.0 구현이 필요하므로 websphere 서버에서 openJPA 버전을 확인 했으므로 괜찮습니다.

어떤 아이디어가 원인 일 수 있습니까?

답변

7

, javax.persistence.EntityManager에있는 방법 getMetaModel()가 없다.

JPA 1.0 및 JPA 2.0의 출처를 확인하십시오.

EntityManager JPA 2.0

EntityManager JPA 1.0

이 방법은 버전 2.0에 존재

. 제 생각에는 버전 1.0에서 JPA의 항아리가없는 경우 종속성을 다시 확인해야합니다.

+1

을 확인하십시오. 나는 1.0.2 (최신 버전?)의 javax.persistence를 컴파일 목표와 함께 사용하여 컴파일시 오류가 없었습니다. 어쨌든 websphere 서버에 있기 때문에 지금 openjpa 2.0 지속성 구현과 목표 "제공"으로 전환했습니다. – masi

+0

의존성 : 트리는 JPA 1을 사용하여 종속성을 나타냅니다.이 문제를 해결하면 내 문제가 해결됩니다. 답변 해주셔서 감사합니다. –

0

@Autowired의 예제는 Bean에 적용하는 것으로 보입니다. 이것은 구체적인 클래스입니다. 인터페이스에 적용하고 있습니까? 맞습니까?

참조 : tutorial 오류 정보 용으로

+0

그래, 문제는 아니지만 http://blog.springsource.org/2011/02/10/getting-started-with-spring-data-jpa/ – masi

1

applicationContext.xml 파일 대신 dispatcher-servlet.xml 파일에 아래 줄을 입력해야한다고 생각합니다.

<tx:annotation-driven transaction-manager="txManager" /> 

나는 며칠 전에 비슷한 문제에 직면했으며,이 변화는 내 목숨을 구했다. :)

희망도 저장됩니다. 건배.

+0

거기에 포인트가있을 수 있습니다. 내 주된 고통이 classpath 지옥 (정답을 보라)에 의해 야기되었다는 생각조차도 이제는 새로운 오류가 발생한다. 주로 websphere su *** 때문입니다. 하지만 포틀릿을 개발하고 있으므로 고전적인 서브렛 방법으로 "스프링 구성"을 얻지 못했습니다. 그래서 그것은 나를위한 해결책이 아닙니다. 그러나 : 다른 사람들이 와서 이것을 보게 될 경우에 대비하여 upvote 할 것입니다. – masi

관련 문제