我的MongoDB中有两种文档:客户端和代码.每个代码都指一个客户端.客户端必须由管理员显式存储,因此我必须将它们分开存储,并且不能将它们放入代码文档中.code - client现在,MongoDB / Morphia将客户端的技术ID保存为...

我的MongoDB中有两种文档:客户端和代码.每个代码都指一个客户端.客户端必须由管理员显式存储,因此我必须将它们分开存储,并且不能将它们放入代码文档中.
code -> client
现在,MongoDB / Morphia将客户端的技术ID保存为ObjectId,而代码则引用技术ID为String类型的客户端.我能够通过给定的客户端ID搜索代码,但在运行时我会收到错误消息,因为Morphia无法注入客户端.我认为这是因为不同的id类型.
code { client.$id: String }
client { _id: ObjectId }
任何想法如何解决这一问题?
例外
com.google.code.morphia.mapping.MappingException:无法为org.example.Code.client获取引用({“$ref”:“clients”,“$id”:“123456789abcdef”})
在互联网上我发现了异常消息.有人建议在模型中使用ObjectId而不是String,但我需要使用String.这不是我自己的项目.
实体:
@Entity("codes")
public class Code implements Comparable<Code> {
@Id
private String id;
@Reference
private Client client;
[...]
}
@Entity("clients")
public class Client {
@Id
private String id;
}
储存:
要存储对象,我使用com.google.code.morphia.dao.DAO.save(T entity).
搜索:
public class CodeRepository extends BasicDAO<Code, String> {
[... constructor ...]
@Override
public Code findByCode(String type, String clientId, String code) {
return findOne(createQuery()
.field("type")
.equal(type)
.field("value")
.equal(code)
.field("client")
.equal(new Key<Client>(Client.class, clientId)));
}
}
解决方法:
不确定这是否已经解决.我有同样的问题.我的解决方案是自己设置id.
@Id
private String id = new ObjectId().toString();
现在,您可以将id字段视为任何其他字符串字段.
希望这可以帮助.
本文标题为:MongoDB / Morphia将技术ID保存为ObjectId,尽管它是Java中的String


基础教程推荐
- JSP出现中文乱码问题解决方法详解 2023-07-30
- 详解Java中static关键字的使用和原理 2023-06-16
- oracle: jdbcTypeForNull configuration property. Cause: java.sql.SQLException: 无效的列类型: 1111 2023-10-31
- SpringBoot Webflux创建TCP/UDP server并使用handler解析数据 2022-10-31
- SpringBoot使用AOP记录接口操作日志的方法 2023-03-22
- java实现面板之间切换功能 2022-12-27
- MybatisPlus之likeRight的用法 2023-02-04
- Java Redis Template批量查询指定键值对的实现 2023-02-27
- SpringBoot详细讲解日志文件 2023-01-18
- Seata AT模式启动过程图文示例详解 2023-06-05