Spring JPA data using injection returns "NoSuchMethodError"

I am using Spring -Data-JPA 1.0.3.RELEASE to manage my ORM.

my persistence.xml looks like this:

<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 is as follows

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

my OrderRepo interface looks like this:

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

and I use it like this in my service class

 @Autowired private OrderRepository repository; 

But it looks like websphere doesn't like it that way, and gives me this error:

 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; 

the only ressource found for this problem indicates errors in previous versions of Spring -Data-JPA that are flagged as currently fixed or errors using incorrect dependencies in jQuery Spring -data-commons: however: I leave this to maven, so the version data-commons should be beautiful. I also found that spring JPA data requires the implementation of JPA 2.0, so I checked the openJPA version on the websphere server, and that’s fine.

Any ideas what could be causing this?

+4
source share
3 answers

As the error reports, the getMetaModel () method is missing in javax.persistence.EntityManager.

Check out JPA 1.0 and JPA 2.0 sources.

EntityManager JPA 2.0

EntityManager JPA 1.0

This method exists only in version 2.0. In my opinion, you should double-check your dependencies if there is no JPA jar in version 1.0.

+7
source

I think you need to put the bottom line in the dispatcher-servlet.xml file instead of the applicationContext.xml file.

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

I encountered a similar problem before a few days, and this change saved my life. :)

I hope that yours will be saved ... Greetings.

+1
source

The @Autowired examples I found seem to apply it to a Bean - this is a concrete class. You apply it to an interface - is that right?

See: tutorial

0
source

Source: https://habr.com/ru/post/1411184/


All Articles