我正在使用Spring-Data-JPA 1.0.3.RELEASE來管理我的ORM。使用注入的Spring數據JPA返回「NoSuchMethodError」
我的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;
我發現的唯一的ressource關於這個問題指出了先前的彈簧數據的JPA版本錯誤它們現在被標記爲已修復或錯誤使用了對spring-data-commons jar的錯誤依賴 - 但是:我將它留給maven,所以數據通用版本應該沒問題。我還發現春季數據JPA需要JPA 2.0實現,因此我檢查了websphere服務器上的openJPA版本,這很好。
任何想法可能導致這種情況?
你是絕對正確的。我在編譯目標中使用了版本爲1.0.2(最新版本?)的javax.persistence,因此我在編譯時沒有錯誤。我現在切換到openjpa 2.0持久化實現,並轉向「提供」的目標,因爲它無論如何都在websphere服務器上。 – masi
依賴項:樹顯示使用JPA 1的依賴項。排除此解決了我的問題。感謝你的回答。 –