Pergunta

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?

Foi útil?

Solução

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

Outras dicas

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

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

I have faced the similar problem before few days and this change saved my life. :)

Hope yours will be saved too... Cheers.

The examples of @Autowired I've found seem to apply it to a Bean - that is a concrete class. You are applying it to an interface - is that correct?

See: tutorial

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top