当前位置: 首页 > 知识库问答 >
问题:

静态编程语言getter覆盖MongoDB

戚京
2023-03-14

我是Kotlin开发的新手,我不知道如何处理这个问题。我将以下Kotlin数据类映射到MongoDB集合(Spring data MongoDB):

@Document(collection = "orders")
data class OrderEntity
@PersistenceConstructor
constructor(@Id val id: ObjectId? = null, val place: String, var date: Date,
            val closed: Boolean = false, val price: Int = 0)

我想覆盖默认的 id 获取器并返回一个字符串而不是对象 Id。似乎“id”字段名称无法更改,因为我收到消息“不允许自定义id属性的字段名称!自定义名称不会被考虑!“,因此我无法使用始终建议的_id解决方案。

如何才能做到这一点?我错过了什么吗?

共有1个答案

景麒
2023-03-14

我没有跟上最新的变化,但是如果你只是简单地将你的id更改为String类型?而不是ObjectId,你的字符串值恰好是ObjectId的“字符串”十六进制代码表示,Spring data将在保存到数据库时自动将其转换为ObjectId,并在将ObjectId读回bean时自动将其转换为String。

基本上,sping-data-mongo为你带来了魔力。我怀疑他们从1. x天开始就改变了这种行为,但我可能错了。

 类似资料:
  • 在Kotlin中,我覆盖了这两个Google登录功能: 检查与谷歌的连接是否失败。 问题是,有时当我关闭包含用户帐户的对话框时,该对话框会在活动启动时弹出 像这样: 我得到了一个带有以下logcat的<code>IllegalArgumentException</code> E/AndroidRuntime:致命异常:主进程:com.dancam.subscriptions,PID:6346 Ja

  • 我刚刚开始使用抽象类,重写val和singeltons。但是,我刚刚遇到了一个非常奇怪的行为。我的目标是拥有一个抽象类,然后创建几个扩展该抽象类的singeltons。因为我需要某些变量,所以我创建了抽象val,然后可以在子类中覆盖它(而不是通过构造函数传递它们)。 所以我上了4节课: 主要活动: 实例: 对象 AClass: 输出: 在此之后,我意识到被覆盖可能直到执行 之后才会初始化。但后来我

  • 我试图用OkHttp和Cucumber在静态编程语言中设置一个Spring启动项目,并且在运行Cucumber任务时遇到以下错误。如何修复? 还有build gradle kts片段 我看到了这个错误https://github.com/square/okio/issues/647看起来可能是它,并修复了这个build.gradle,我如何将其翻译为kotlinbuild.gradle.kts?

  • 我有一个Java类(我不能编辑,因为它是由Thrift自动生成的)定义如下: 但是,如果我尝试从静态编程语言获取,则不可用,并会产生未解决的引用错误。尝试使用字段会产生以下错误: 错误:(470,30)静态编程语言:重载解决歧义: 公共最终var消息:字符串!定义在com.example.TheirExctive 公共打开val消息:字符串?定义在com.example.TheirExctive

  • 如图所示,https://stackoverflow.com/a/16639438/8949356,在Java中,当声明的类是公共类时,可以重写其函数 但是我想知道如何用静态编程语言编写完全相同的代码,我已经尝试了很多,但没有找到任何关于这个主题的东西。我可以在Java中去做这件事,但我的其余代码是用静态编程语言编写的,而且我不能一直带着这种怀疑;静态编程语言对我来说是一个很好的工具,我想学习它。

  • 我有一个用Kotlin编写的Android服务,我用Guice注入它。它有不能为null的lateinit字段,但它们必须是lateinit,因为我不能使用构造函数注入。 这些线条周围的内容: 现在,当我创建 JaCoCo 报告时,访问任何延迟字段的所有行都标记为部分覆盖。我认为 Kotlin 编译器对字节码进行了一些检查,以确保字段在被访问之前被初始化。 有什么方法可以禁用这些检查吗?我想要10