2

Spring Data JPA を使用して Spring MVC アプリを開発しています。JPAリポジトリを構築しました。

public interface AccessReportRepository extends JpaRepository<AccessReport, Long> {    
}

プロジェクトでは、JPA とともに Spring Data Mongo も使用しています。

プロジェクトを実行すると、このエラーが発生します。

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'lastDateController': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.innolabmm.software.mongotest.springrest.ReadingService com.innolabmm.software.mongotest.springrest.LastDateController.readingService; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'readingService': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.innolabmm.software.mongotest.springrest.AccessReportRepository com.innolabmm.software.mongotest.springrest.ReadingService.reportRepository; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'accessReportRepository': FactoryBean threw exception on object creation; nested exception is org.springframework.data.mapping.PropertyReferenceException: No property flush found for type void

何が起こっているのか誰にも分かりますか?これが問題の解決に役立つ場合は、より多くの情報を提供する準備ができています. 前もって感謝します。

4

2 に答える 2

2

Spring Boot を使用していますか?

Spring Boot アプリケーションで JPA と Mongo を一緒に使用しようとすると、同じ例外がスローされました。リポジトリが常に JPA と Mongo の両方によって解釈されていたため、リポジトリが具体的に拡張されているため、問題が発生していることがわかりましたJpaRepository

JPA リポジトリのみを生成したかったので、Application エントリ ポイントに以下を追加しました。

@EnableAutoConfiguration(exclude={MongoRepositoriesAutoConfiguration.class})
于 2014-01-29T01:52:34.643 に答える
0

JPA で MongoDB を使用している場合 (私の JPA データベースは mysql です)、次のようにします。

  • ドメイン オブジェクトとリポジトリ (DAO) 用に個別のパッケージを作成します。つまり、demo.mysql.domain、demo.mysql.dao、demo.mongo.domain、demo.mongo.dao です。
  • 構成クラスでは、次の注釈を使用します。
    @EntityScan(basePackages={"demo.mysql.domain"})
    @EnableJpaRepositories(basePackages={"demo.mysql.dao"})
    @EnableMongoRepositories(basePackages={"demo.mongo.dao"})
  • @Entity で JPA エンティティに注釈を付け、それらをすべて demo.mysql.domain パッケージに入れます
  • MongoDB エンティティに @Document で注釈を付け、それらをすべて demo.mongo.domain パッケージに入れます
  • すべての MongoDB リポジトリを demo.mongo.dao パッケージに保持する
  • すべての JPA リポジトリを demo.mysql.dao パッケージに保持する
  • すべての mongo リポジトリは MongoRepository を拡張する必要があります (つまり、パブリック インターフェイス TransactionRepository は MongoRepository を拡張します)。
  • すべての JPA リポジトリは JpaRepository を拡張する必要があります (つまり、パブリック インターフェイス CityRepository は JpaRepository を拡張します)。

これは、MongoDB と Mysql を 1 つの Spring Boot アプリで動作させるために (ドキュメントを掘り下げた後に) 私が見つけた最も簡単でクリーンな方法です。

それが私が試したことであり、何が機能するかです。おそらく、MongoTemplate を使用するか、JpaRepository の代わりに CrudRepository を拡張するか、または他の方法で試してみると、うまくいくかもしれません。

于 2014-06-20T04:07:38.370 に答える