2012-05-07 1 views
4

J'utilise Spring-Data-JPA 1.0.3.RELEASE pour gérer mon ORM.printemps données JPA en utilisant les retours d'injection "NoSuchMethodError"

mon persistence.xml ressemble à ceci:

<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 ressemble à ce

<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> 

mon interface OrderRepo ressemble à ceci:

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

et je l'utilise comme ceci dans ma classe de service

@Autowired 
private OrderRepository repository; 

Mais il ressemble à websphere dosn't comme autant et me donne cette erreur:

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; 

la seule ressource que j'ai trouvé en ce qui concerne ce problème signale des erreurs dans les versions précédentes Spring-Data-JPA qui sont marqués comme fixes maintenant ou des erreurs utilisant de mauvaises dépendances au jar spring-data-commons - cependant: je laisse cela à maven donc la version de data-commons devrait être bien. J'ai aussi trouvé que les données de printemps JPA a besoin d'une implémentation JPA 2.0 donc j'ai vérifié la version openJPA sur le serveur websphere et ça va.

Toutes les idées ce qui pourrait être la cause?

Répondre

7

Comme les informe d'erreur, il n'y a pas de méthode getMetaModel() dans javax.persistence.EntityManager.

Vérifiez les sources de JPA 1.0 et JPA 2.0.

EntityManager JPA 2.0

EntityManager JPA 1.0

Cette méthode existe uniquement en version 2.0. À mon avis, vous devriez vérifier vos dépendances s'il n'y a pas de jar de JPA dans la version 1.0

+1

vous êtes tout à fait raison. J'ai utilisé javax.persistence à la version 1.0.2 (dernière version?) avec l'objectif de compilation, donc je n'ai eu aucune erreur au moment de la compilation. Je suis passé à l'implémentation de la persistance openjpa 2.0 maintenant et à l'objectif "fourni", puisqu'il est de toute façon sur le serveur websphere. – masi

+0

dépendance: l'arbre a révélé une dépendance en utilisant JPA 1. Excluant cela a résolu mon problème. Merci d'avoir répondu. –

0

Les exemples de @Autowired que j'ai trouvé semblent l'appliquer à un Bean - qui est une classe concrète. Vous l'appliquez à une interface - est-ce correct?

Voir: tutorial

+0

oui, mais cela ne devrait pas être un problème, vérifiez http://blog.springsource.org/2011/02/10/getting-started-with-spring-data-jpa/ – masi

1

Je pense que vous devez mettre la ligne ci-dessous dans le fichier dispatcher-servlet.xml au lieu du fichier applicationContext.xml. J'ai eu le même problème avant quelques jours et ce changement m'a sauvé la vie. :)

espoir vôtre sera sauvé aussi ... Vive.

+0

vous pourriez avoir un point là. même pensé que ma douleur principale a été causée par l'enfer des classes (voir la réponse correcte), maintenant je reçois de nouvelles erreurs. principalement parce que websphere su ***. mais depuis que je suis en train de développer un portlet, je n'ai pas de "config printanier" de la manière classique des servlets. donc ce n'est pas la solution pour moi. cependant: je vais upvote au cas où d'autres viendraient voir ça. – masi

Questions connexes