spring-data - 为什么我的 Spring Data MongoDB 存储库在升级到最新版本后无法引导?

标签 spring-data java-8 spring-data-mongodb

我最近将一个小项目更新到了 Java 8。该项目使用 spring-data-mongodb。 我将所有 spring 依赖项版本升级到最新的稳定版本。 spring-data-mongodb 正在 1.5.2.RELEASE 上运行。

<dependency>
  <groupId>org.springframework.data</groupId>
  <artifactId>spring-data-mongodb</artifactId>
  <version>1.5.2.RELEASE</version>
</dependency>

每当我启动服务时,我都会收到 java.lang.Object 的 MappingException。

这是堆栈跟踪:

15:21:51.177 [main] ERROR o.s.web.servlet.DispatcherServlet - Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'pageableIdsRepository': Invocation of init method failed; nested exception is org.springframework.data.mapping.model.MappingException: Could not lookup mapping metadata for domain class java.lang.Object!
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1553) ~[spring-beans-4.0.6.RELEASE.jar:4.0.6.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:539) ~[spring-beans-4.0.6.RELEASE.jar:4.0.6.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475) ~[spring-beans-4.0.6.RELEASE.jar:4.0.6.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) ~[spring-beans-4.0.6.RELEASE.jar:4.0.6.RELEASE]
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228) ~[spring-beans-4.0.6.RELEASE.jar:4.0.6.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) ~[spring-beans-4.0.6.RELEASE.jar:4.0.6.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) ~[spring-beans-4.0.6.RELEASE.jar:4.0.6.RELEASE]
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:684) ~[spring-beans-4.0.6.RELEASE.jar:4.0.6.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:760) ~[spring-context-4.0.6.RELEASE.jar:4.0.6.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:482) ~[spring-context-4.0.6.RELEASE.jar:4.0.6.RELEASE]
    at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:658) ~[spring-webmvc-4.0.6.RELEASE.jar:4.0.6.RELEASE]
    at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:624) ~[spring-webmvc-4.0.6.RELEASE.jar:4.0.6.RELEASE]
    at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:672) ~[spring-webmvc-4.0.6.RELEASE.jar:4.0.6.RELEASE]
    at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:543) ~[spring-webmvc-4.0.6.RELEASE.jar:4.0.6.RELEASE]
    at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:484) ~[spring-webmvc-4.0.6.RELEASE.jar:4.0.6.RELEASE]
    at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:136) [spring-webmvc-4.0.6.RELEASE.jar:4.0.6.RELEASE]
    at javax.servlet.GenericServlet.init(GenericServlet.java:244) [javax.servlet-api-3.1.0.jar:3.1.0]
    at org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:600) [jetty-servlet-9.2.2.v20140723.jar:9.2.2.v20140723]
    at org.eclipse.jetty.servlet.ServletHolder.initialize(ServletHolder.java:389) [jetty-servlet-9.2.2.v20140723.jar:9.2.2.v20140723]
    at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:869) [jetty-servlet-9.2.2.v20140723.jar:9.2.2.v20140723]
    at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:298) [jetty-servlet-9.2.2.v20140723.jar:9.2.2.v20140723]
    at org.eclipse.jetty.webapp.WebAppContext.startWebapp(WebAppContext.java:1341) [jetty-webapp-9.2.2.v20140723.jar:9.2.2.v20140723]
    at org.eclipse.jetty.maven.plugin.JettyWebAppContext.startWebapp(JettyWebAppContext.java:296) [jetty-maven-plugin-9.2.2.v20140723.jar:9.2.2.v20140723]
    at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1334) [jetty-webapp-9.2.2.v20140723.jar:9.2.2.v20140723]
    at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:741) [jetty-server-9.2.2.v20140723.jar:9.2.2.v20140723]
    at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:497) [jetty-webapp-9.2.2.v20140723.jar:9.2.2.v20140723]
    at org.eclipse.jetty.maven.plugin.JettyWebAppContext.doStart(JettyWebAppContext.java:365) [jetty-maven-plugin-9.2.2.v20140723.jar:9.2.2.v20140723]
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) [jetty-util-9.2.2.v20140723.jar:9.2.2.v20140723]
    at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:132) [jetty-util-9.2.2.v20140723.jar:9.2.2.v20140723]
    at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:114) [jetty-util-9.2.2.v20140723.jar:9.2.2.v20140723]
    at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:61) [jetty-server-9.2.2.v20140723.jar:9.2.2.v20140723]
    at org.eclipse.jetty.server.handler.ContextHandlerCollection.doStart(ContextHandlerCollection.java:163) [jetty-server-9.2.2.v20140723.jar:9.2.2.v20140723]
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) [jetty-util-9.2.2.v20140723.jar:9.2.2.v20140723]
    at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:132) [jetty-util-9.2.2.v20140723.jar:9.2.2.v20140723]
    at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:114) [jetty-util-9.2.2.v20140723.jar:9.2.2.v20140723]
    at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:61) [jetty-server-9.2.2.v20140723.jar:9.2.2.v20140723]
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) [jetty-util-9.2.2.v20140723.jar:9.2.2.v20140723]
    at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:132) [jetty-util-9.2.2.v20140723.jar:9.2.2.v20140723]
    at org.eclipse.jetty.server.Server.start(Server.java:380) [jetty-server-9.2.2.v20140723.jar:9.2.2.v20140723]
    at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:114) [jetty-util-9.2.2.v20140723.jar:9.2.2.v20140723]
    at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:61) [jetty-server-9.2.2.v20140723.jar:9.2.2.v20140723]
    at org.eclipse.jetty.server.Server.doStart(Server.java:347) [jetty-server-9.2.2.v20140723.jar:9.2.2.v20140723]
    at org.eclipse.jetty.maven.plugin.JettyServer.doStart(JettyServer.java:76) [jetty-maven-plugin-9.2.2.v20140723.jar:9.2.2.v20140723]
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) [jetty-util-9.2.2.v20140723.jar:9.2.2.v20140723]
    at org.eclipse.jetty.maven.plugin.AbstractJettyMojo.startJetty(AbstractJettyMojo.java:543) [jetty-maven-plugin-9.2.2.v20140723.jar:9.2.2.v20140723]
    at org.eclipse.jetty.maven.plugin.AbstractJettyMojo.execute(AbstractJettyMojo.java:360) [jetty-maven-plugin-9.2.2.v20140723.jar:9.2.2.v20140723]
    at org.eclipse.jetty.maven.plugin.JettyRunMojo.execute(JettyRunMojo.java:167) [jetty-maven-plugin-9.2.2.v20140723.jar:9.2.2.v20140723]
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101) [maven-core-3.0.4.jar:3.0.4]
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209) [maven-core-3.0.4.jar:3.0.4]
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153) [maven-core-3.0.4.jar:3.0.4]
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145) [maven-core-3.0.4.jar:3.0.4]
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84) [maven-core-3.0.4.jar:3.0.4]
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59) [maven-core-3.0.4.jar:3.0.4]
    at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183) [maven-core-3.0.4.jar:3.0.4]
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161) [maven-core-3.0.4.jar:3.0.4]
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:320) [maven-core-3.0.4.jar:3.0.4]
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156) [maven-core-3.0.4.jar:3.0.4]
    at org.apache.maven.cli.MavenCli.execute(MavenCli.java:537) [maven-embedder-3.0.4.jar:3.0.4]
    at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196) [maven-embedder-3.0.4.jar:3.0.4]
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:141) [maven-embedder-3.0.4.jar:3.0.4]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_05]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_05]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_05]
    at java.lang.reflect.Method.invoke(Method.java:483) ~[na:1.8.0_05]
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290) [plexus-classworlds-2.4.jar:na]
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230) [plexus-classworlds-2.4.jar:na]
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409) [plexus-classworlds-2.4.jar:na]
    at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352) [plexus-classworlds-2.4.jar:na]
Caused by: org.springframework.data.mapping.model.MappingException: Could not lookup mapping metadata for domain class java.lang.Object!
    at org.springframework.data.mongodb.repository.support.MongoRepositoryFactory.getEntityInformation(MongoRepositoryFactory.java:144) ~[spring-data-mongodb-1.5.2.RELEASE.jar:na]
    at org.springframework.data.mongodb.repository.support.MongoRepositoryFactory.getTargetRepository(MongoRepositoryFactory.java:83) ~[spring-data-mongodb-1.5.2.RELEASE.jar:na]
    at org.springframework.data.repository.core.support.RepositoryFactorySupport.getRepository(RepositoryFactorySupport.java:158) ~[spring-data-commons-1.8.2.RELEASE.jar:na]
    at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.initAndReturn(RepositoryFactoryBeanSupport.java:224) ~[spring-data-commons-1.8.2.RELEASE.jar:na]
    at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.afterPropertiesSet(RepositoryFactoryBeanSupport.java:210) ~[spring-data-commons-1.8.2.RELEASE.jar:na]
    at org.springframework.data.mongodb.repository.support.MongoRepositoryFactoryBean.afterPropertiesSet(MongoRepositoryFactoryBean.java:108) ~[spring-data-mongodb-1.5.2.RELEASE.jar:na]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1612) ~[spring-beans-4.0.6.RELEASE.jar:4.0.6.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1549) ~[spring-beans-4.0.6.RELEASE.jar:4.0.6.RELEASE]
    ... 67 common frames omitted

这个java.lang.Object来自哪里,为什么不能正确映射?

我调试了该库,发现 java.lang.Object 类被传递了不止一次。也许 Java 8 一次,另一个版本一次?正如你所看到的,我的想法已经用完了:)。

最令我惊讶的是,通过谷歌搜索这个问题,我找不到任何相关内容。

最佳答案

从异常来看,对 Spring Data 存储库的扫描似乎正在拾取一个中间存储库,该中间存储库并不打算成为真正的存储库实例,而是包含其他存储库为其定义具体类型的一些通用声明。

这可以通过使用 @NoRepositoryBean 注解 PageableIdsRepository 来解决。其详细信息在corresponding section of the reference documentation中进行了解释。 .

您现在看到弹出窗口的原因是您之前可能使用过 Spring Data MongoDB 的某个版本,该版本没有急切地实例化存储库,因此只要没有人实际注入(inject) PageableIdsRepository它不会被创建。我们在某些时候将其更改为急切实例化,这也是其他 Spring bean 的默认设置。

关于spring-data - 为什么我的 Spring Data MongoDB 存储库在升级到最新版本后无法引导?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25172424/

相关文章:

java - mongo中使用spring data的map类型字段的引用值(dbref)

java - 未找到 Spring-data-elasticsearch Maven 依赖项

Java8 列表<T> 到列表<object[]>

java - 使用 Spring Data MongoDB 时,使用 Map 作为 bean 中的属性时出现异常?

java - 带有@Document的mongodb Multi-Tenancy 咒语

java - Spring data mongoDB 数据库连接的惰性配置

java - 忽略在 Json 对象中传递的字段

spring - 在 Spring MVC 端点中使用多个 Pageable 参数

java - Java8中 "Autocloseable"的数组或集合

java - 在 Java 中调用包含可选值的列表?