使用 spring-data-mongodb 持久化包含对象的对象

2023-11-26

下面是一个后续问题问题 13832188:

我在用着spring-data-mongodb版本1.1.1.RELEASE。如果所有成员变量都是原始类型,我就能够持久保存一个对象,即使该对象的名称@PersistenceConstructor通过使用参数与成员变量的名称不完全匹配@Field and @Value注释。

但是,我得到了MappingInstantiationException当我尝试保留包含其他对象的对象时。我的问题:

  • 这是一个错误吗spring-data-mongodb或者我做错了什么?
  • 需要更改什么才能正确保留包含对象的对象?

.

org.springframework.data.mapping.model.MappingInstantiationException: Could not instantiate bean class [com.recorder.TestRecorder2$ObjectContainer]: Illegal arguments for constructor; nested exception is java.lang.IllegalArgumentException: argument type mismatch
    at org.springframework.data.convert.ReflectionEntityInstantiator.createInstance(ReflectionEntityInstantiator.java:77)
    at org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:229)
    at org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:209)
    at org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:173)
    at org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:169)
    at org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:72)
    at org.springframework.data.mongodb.core.MongoTemplate$ReadDbObjectCallback.doWith(MongoTemplate.java:1820)
    at org.springframework.data.mongodb.core.MongoTemplate.executeFindMultiInternal(MongoTemplate.java:1542)
    at org.springframework.data.mongodb.core.MongoTemplate.findAll(MongoTemplate.java:1064)
    at com.recorder.TestRecorder2.testObjectContainer(RecorderTest2.java:63)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
    at org.junit.runners.BlockJUnit4ClassRunner.runNotIgnored(BlockJUnit4ClassRunner.java:79)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:71)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:49)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
    at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [com.recorder.TestRecorder2$ObjectContainer]: Illegal arguments for constructor; nested exception is java.lang.IllegalArgumentException: argument type mismatch
    at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:158)
    at org.springframework.data.convert.ReflectionEntityInstantiator.createInstance(ReflectionEntityInstantiator.java:75)
    ... 34 more
Caused by: java.lang.IllegalArgumentException: argument type mismatch
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
    at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:147)
    ... 35 more

My PrimitiveContainer and ObjectContainer类别如下:

@Document
class PrimitiveContainer {

    @Field("property") 
    private final int m_property;

    @PersistenceConstructor
    public PrimitiveContainer(@Value("#root.property") int a_property) {
        m_property = a_property;
    }

    public int property() {
        return m_property;
    }
}

@Document
class ObjectContainer {

    @Field("property") 
    private final PrimitiveContainer m_property;

    @PersistenceConstructor
    public ObjectContainer(@Value("#root.property") PrimitiveContainer a_property) {
        m_property = a_property;
    }

    public PrimitiveContainer property() {
        return m_property;
    }
}

**更新:** 奇怪的是,更改中的字符串@Field对“属性”以外的内容进行注释或删除@Field注释完全是为了ObjectContainer m_property允许 spring-data-mongo-db 属性重新实例化我的持久化ObjectContainer班级。我不明白为什么这有效。有人有主意吗?


您似乎发现了一个错误。第一个 Spel 表达式求值的结果是DBObject并且没有实际翻译成参数类型。我已经在本地有一些代码可以解决这个问题。您介意针对 Spring Data MongoDB 创建一个票证以将其归档为错误吗?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 spring-data-mongodb 持久化包含对象的对象 的相关文章

随机推荐

  • Python 子进程 readlines() 挂起

    我尝试完成的任务是流式传输 ruby 文件并打印输出 NOTE 我不想一次打印出所有内容 main py from subprocess import Popen PIPE STDOUT import pty import os file
  • 在 WPF 中比较两个位图图像以检查它们是否不同的最快方法

    比较 2 个 BitmapImage 对象的最快方法是什么 一个位于 图像源 属性中 另一个是我在代码中创建的 我可以使用新的位图图像设置图像源 但它会导致闪烁 因为它会一遍又一遍地设置相同的图像 我只想在图像像素与 Image Sourc
  • ZEND,用数据渲染不同的视图

    我有一个问题 因为我想从不同的控制器渲染视图并传递数据 你知道该怎么做吗 我正在尝试 this gt renderScript index index phtml gt entries result 但我的如果 if count this
  • 当父元素为 display:none 时显示 HTML 子元素

    当父元素为 display none 时 是否有任何机制可以显示子元素 这种情况是隐藏选项卡上的验证错误 我想显示错误消息 即使该字段是隐藏的 这里是一个真正简化的 JSFiddle 情况http jsfiddle net vLYnk Ma
  • 如何在 SBT 中切换项目和库依赖关系?

    在 SBT 中声明托管库依赖关系很容易 例如 libraryDependencies Seq org specs2 specs2 1 12 2 test junit junit 4 7 test 虽然在 SBT 中声明项目依赖关系并不那么容
  • 在 iOS 上同时录制和播放(Phonegap 版本)

    我正在使用 Phonegap Build 版本 3 3 0 开发 iOS 和 Android 应用程序 应用程序的主要焦点是录音 并在后台播放另一个音频 音乐 对于这两种情况 我都使用phonegap媒体api和正确的音频文件进行录制 iO
  • concatMap f xs 和 concat $map f xs 之间的区别?

    想必他们做的是完全相同的事情concatMap f xs and concat map f xs 我为什么要选择其中之一而不是另一个 我想这可能是一种优化 如果是这样 GHC 7 8 仍然是这种情况吗 情况是这样的concatMap f x
  • Skype API 消息输出

    我如何从 Skype 接收消息并将其输出到我的应用程序 textbox1 Text 我在 skype4com 文档中寻找它 但没有找到任何内容 要监听聊天消息 您可以执行以下操作 First make a reference to skyp
  • JSON,替换引号和斜杠,但是用什么替换呢?

    我有一个忘恩负义的任务 就是在 Java 中手动构建 JSON 字符串 没有任何框架 只有一个 StringBuilder 我知道这很糟糕 但这只是原型的一部分 下次我会做得更好 我的问题 我怎样才能把字符串 gt Some text WI
  • 如何使用node-http-proxy进行HTTP到HTTPS的路由?

    这是我正在使用的模块版本 npm list g grep proxy email protected Web 服务调用我的机器 我的任务是根据请求正文的内容使用附加查询参数将请求代理到不同的 url 和主机 var http require
  • Python 3.5 UnicodeDecodeError 对于 utf-8 格式的文件(语言为“ang”,古英语)

    这是我第一次使用 StackOverflow 提问 但多年来你们集体保存了我的许多项目 让我感觉宾至如归 我正在使用 Python3 5 和 nltk 来解析完整的古英语语料库 该语料库以 77 个文本文件和一个 XML 文档的形式发布给我
  • 检查我的提交在 emacs/git 中是否有“import pdb”?

    我承诺import pdb pdb set trace 经常 有什么方便的方法可以阻止我这样做吗 我使用 emacs git magit 为了完整起见 以下是如何检查索引中版本的内容 构建尤金的回答并进行了一些更改 未作为完整的钩子进行测试
  • Razor 语法在编译前在视图中给出错误(无智能感知)

    我正在浏览 NuGet 包列表 并且正在更新 bootstrap jQuery 等所有内容 但是当我这样做时 我不假思索地更新了微软 欧文和另一个包 可能是 EF 或其他东西 它是一个主要版本更新 哎呀 我不得不通过删除我的项目 从源代码控
  • 如何将默认 MessageConverter 设置为 JSON 并添加 jackson-dataformat-xml?

    我有一个工作的 Spring Boot 应用程序 它使用 JSON 作为交换数据格式 现在我必须添加一个仅以 xml 形式发送数据的服务 我添加了jackson dataformat xml到我的 pom 效果很好 Service publ
  • 在 blueimp 画廊内添加描述

    我正在使用一个蓝小鬼画廊将灯箱添加到我的图片库 因此 当您单击图像缩略图时 它会启动一个带有较大版本图像等的灯箱 我还想在灯箱的每张幻灯片中添加一些描述性文本和一个按钮 但我无法使其正常工作 它不会显示我添加的占位符描述 这是我到目前为止所
  • 获取函数所需的参数数量

    这是一个延伸问题PHP 将 this 传递给类外的函数 我相信这就是我正在寻找的东西 但它是在 python 中而不是 php 中 以编程方式确定函数所需的参数数量 Python 假设我有一个这样的函数 function client fu
  • 仅使用增量、循环、赋值、零的减法运算

    我正在尝试仅使用以下操作来构建减法 加法 除法 乘法和其他运算 incr x 一旦调用此函数 它将把 x 1 赋给 x allocate x y 该函数将把 y 的值赋给 x x y Zero x 该函数将 0 分配给 x x 0 Loop
  • Azure 无法访问存储在应用服务配置中的连接字符串

    我在 Azure 中有一个应用程序服务 作为我正在设计的系统的 API 运行 由于 API 负责直接访问数据库 因此我显然不想在源代码中存储连接字符串 因此将其存储在 Azure 仪表板上应用服务配置中的连接字符串部分中 我的代码几乎是这个
  • PHP - 获取网站的图标并在必要时将其转换为 png

    对于任何给定的站点 example domain tld 或仅仅是 domain tld 我需要在 PHP 中执行以下操作 If the site has a favicon get it wherever it is 如果它还不是 PNG
  • 使用 spring-data-mongodb 持久化包含对象的对象

    下面是一个后续问题问题 13832188 我在用着spring data mongodb版本1 1 1 RELEASE 如果所有成员变量都是原始类型 我就能够持久保存一个对象 即使该对象的名称 PersistenceConstructor通