Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Spring Data JPA using injection returns "NoSuchMethodError"

I'm 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 looks like this

<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'm using it like this within my service class

@Autowired
private OrderRepository repository;

But it looks like websphere dosn't like it as much 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 i found regarding this problem points out errors in previous Spring-Data-JPA versions which are marked as fixed by now or errors using wrong dependencies to the spring-data-commons jar - however: i'm leaving that to maven so the data-commons version should be fine. also i found that spring data JPA needs a JPA 2.0 implementation so i checked for the openJPA version on the websphere server and it's fine.

Any ideas what could be causing this?

like image 377
omni Avatar asked Feb 20 '23 14:02

omni


1 Answers

As the error informs, there is no method getMetaModel() in javax.persistence.EntityManager.

Check sources of JPA 1.0 and JPA 2.0.

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 jar of JPA in version 1.0

like image 94
BartoszMiller Avatar answered Mar 08 '23 09:03

BartoszMiller