无法将 Spring Data MongoDB + Spring Data JPA 与 Spring Boot 一起使用

Posted

技术标签:

【中文标题】无法将 Spring Data MongoDB + Spring Data JPA 与 Spring Boot 一起使用【英文标题】:Unable to use Spring Data MongoDB + Spring DataJPA together with SpringBoot 【发布时间】:2014-10-21 03:55:51 【问题描述】:

当我尝试将 Spring Data JPA 和 Spring Data MongoDB 与 SpringBoot 一起使用时,它假设我的 Mongo 实体也是 JPA 实体并抛出错误。

我有 Person JPA 实体和扩展 JpaRepository 的 PersonRepository。我有用户 Mongo 实体和扩展 MongoRepository 的 UserRepository。

当我启动应用程序时,我收到以下错误:

Caused by: java.lang.IllegalArgumentException: Not an managed type: class com.sivalabs.app.mongoentities.User
    at org.hibernate.jpa.internal.metamodel.MetamodelImpl.managedType(MetamodelImpl.java:219)
    at org.springframework.data.jpa.repository.support.JpaMetamodelEntityInformation.<init>(JpaMetamodelEntityInformation.java:68)
    at org.springframework.data.jpa.repository.support.JpaEntityInformationSupport.getMetadata(JpaEntityInformationSupport.java:65)
    at org.springframework.data.jpa.repository.support.JpaRepositoryFactory.getEntityInformation(JpaRepositoryFactory.java:149)
    at org.springframework.data.jpa.repository.support.JpaRepositoryFactory.getTargetRepository(JpaRepositoryFactory.java:88)
    at org.springframework.data.jpa.repository.support.JpaRepositoryFactory.getTargetRepository(JpaRepositoryFactory.java:68)
    at org.springframework.data.repository.core.support.RepositoryFactorySupport.getRepository(RepositoryFactorySupport.java:158)
    at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.initAndReturn(RepositoryFactoryBeanSupport.java:224)
    at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.afterPropertiesSet(RepositoryFactoryBeanSupport.java:210)
    at org.springframework.data.jpa.repository.support.JpaRepositoryFactoryBean.afterPropertiesSet(JpaRepositoryFactoryBean.java:92)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1612)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1549)
    ... 66 more

有什么解决办法吗?

【问题讨论】:

能否请您发布您的 Spring 配置? 【参考方案1】:

您应该将 Mongo 和 JPA 实体放在单独的包中(看起来您已经这样做了),然后使用 @EnableMongoRepositories(basePackageClasses=SomeMongoEntity.class)@EnableJpaRepositories(basePackageClasses=SomeJpaEntity.class) 以便 Spring Data 知道分别在哪里可以找到 Mongo 和 JPA 实体。您可以在 Spring Boot 的MixedMongoRepositoriesAutoConfigurationTests 中看到这些注解。

【讨论】:

以上是关于无法将 Spring Data MongoDB + Spring Data JPA 与 Spring Boot 一起使用的主要内容,如果未能解决你的问题,请参考以下文章

Spring Data MongoDB - Criteria API OrOperator 无法正常工作

无法在 SpEL 中为 Spring Data MongoDB 集合名称解析 bean

将 Spring 安全 ACL 与 spring-data-mongodb 一起使用

MongoDB Aggregation - 如何使用 spring-data-mongodb 将查询表达式应用到匹配阶段?

Spring Data (数据)MongoDB

java 将Jackson与Spring Data MongoDB一起使用