4

私はSpring-Data-JPA1.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 DataJPAにはJPA2.0の実装が必要であることがわかったので、websphereサーバーでopenJPAバージョンを確認しましたが、問題ありません。

これを引き起こしている可能性のあるアイデアはありますか?

4

3 に答える 3

7

エラーが通知するように、javax.persistence.EntityManagerにはメソッドgetMetaModel()がありません。

JPA1.0およびJPA2.0のソースを確認してください。

EntityManager JPA 2.0

EntityManager JPA 1.0

このメソッドはバージョン2.0にのみ存在します。私の意見では、バージョン1.0にJPAのjarがない場合は、依存関係を再確認する必要があります。

于 2012-05-07T21:36:47.533 に答える
1

applicationContext.xmlファイルではなくdispatcher-servlet.xmlファイルに以下の行を入れる必要があると思います。

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

私は数日前に同様の問題に直面しました、そしてこの変化は私の命を救いました。:)

あなたも救われることを願っています...乾杯。

于 2012-05-08T09:05:25.643 に答える
0

私が見つけた@Autowiredの例は、それをBeanに適用しているようです-これは具体的なクラスです。あなたはそれをインターフェースに適用しています-それは正しいですか?

参照:チュートリアル

于 2012-05-07T21:29:50.360 に答える