2

我正在使用 Spring Data JPA 开发 Spring MVC 应用程序。我建立了一个 JPA 存储库。

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

我还在我的项目中使用 Spring Data Mongo 和 JPA。

当我运行该项目时,我收到此错误。

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

如果您将 MongoDB 与 JPA 一起使用(我的 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 包中
  • 使用 @Document 注释您的 MongoDB 实体并将它们全部放在 demo.mongo.domain 包中
  • 将所有 MongoDB 存储库保存在 demo.mongo.dao 包中
  • 将所有 JPA 存储库保存在 demo.mysql.dao 包中
  • 所有 mongo 存储库都应该扩展 MongoRepository(即公共接口 TransactionRepository 扩展 MongoRepository)
  • 所有 JPA 存储库都应该扩展 JpaRepository(即公共接口 CityRepository 扩展 JpaRepository)

这是迄今为止我发现的最简单和最干净的方法(在挖掘文档之后,顺便说一句。)让 MongoDB 和 Mysql 在一个 Spring Boot 应用程序中工作。

这就是我尝试过的方法并且有效。您可能可以使用 MongoTemplate 或扩展 CrudRepository 而不是 JpaRepository,或者其他任何方法,尝试一下,它可能会起作用。

于 2014-06-20T04:07:38.370 回答