Spring Data JPA 使用注入(inject)返回 "NoSuchMethodError"

标签 spring websphere spring-data spring-data-jpa

我正在使用 Spring-Data-JPA 1.0.3.RELEASE 来管理我的 ORM。

我的 persistence.xml 看起来像这样:

<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 看起来像这样
<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>

我的 OrderRepo 界面如下所示:
@Transactional(readOnly = true)
public interface OrderRepository extends JpaRepository<Order, Long> {
//my stuff
}

我在我的服务类中使用它
@Autowired
private OrderRepository repository;

但看起来 websphere 不太喜欢它,并给了我这个错误:
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;

我发现的关于这个问题的唯一资源指出了以前的 Spring-Data-JPA 版本中的错误,这些版本现在被标记为已修复,或者使用错误的依赖关系到 spring-data-commons jar 的错误 - 但是:我把它留给 maven 所以data-commons 版本应该没问题。我还发现 Spring Data JPA 需要 JPA 2.0 实现,所以我检查了 websphere 服务器上的 openJPA 版本,这很好。

有什么想法可能导致这种情况吗?

最佳答案

如错误所示,javax.persistence.EntityManager 中没有方法 getMetaModel()。

检查 JPA 1.0 和 JPA 2.0 的源代码。

EntityManager JPA 2.0

EntityManager JPA 1.0

此方法仅存在于 2.0 版本中。在我看来,如果 1.0 版中没有 JPA jar,你应该仔细检查你的依赖项

关于Spring Data JPA 使用注入(inject)返回 "NoSuchMethodError",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10489327/

相关文章:

json - Spring Boot Actuator pretty-print JSON

java - 一些关于 hibernate 标准查询的帮助

javascript - 区分浏览器关闭事件和注销事件

java - Spring/Hibernate 添加一个在关闭 EntityManagerFactory 之前运行的关闭钩子(Hook)

spring-data-jpa - 是否有不等于条件的ExampleMatcher

java - Spring Envers 有条件更新

spring - 将 spring boot war 部署到 tomcat 中

java - JSF 2.0 可以与 Websphere 应用程序服务器版本 7.x 一起使用吗

java - 如何在 WebSphere Liberty 中设置方法级别事务超时?

java - Spring Data 和 MongoDB - deleteBy 上的 UnsupportedOperationException