gpt4 book ai didi

java - MongoDB/Morphia 将技术 ID 保存为 ObjectId,尽管它在 Java 中是一个字符串

转载 作者:可可西里 更新时间:2023-11-01 09:11:02 27 4
gpt4 key购买 nike

我的 MongoDB 中有两种文档:客户端和代码。每个代码代表一个客户。客户端必须由管理员明确存储,因此我必须将它们分开存储,不能将它们放入代码文档中。

code -> client

现在 MongoDB/Morphia 将客户端的技术 ID 保存为 ObjectId,而代码引用具有 String 类型技术 ID 的客户端。我能够通过给定的客户端 ID 搜索代码,但在运行时我会收到一条错误消息,因为 Morphia 无法注入(inject)客户端。我认为这是因为不同的 id 类型。

code { client.$id: String }
client { _id: ObjectId }

有什么办法解决这个问题吗?

异常

com.google.code.morphia.mapping.MappingException:无法为 org.example.Code.client 获取引用({“$ref”:“clients”,“$id”:“123456789abcdef”})

在 Internet 上我发现了该异常消息。有人建议在模型中使用 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 字段。

希望这对您有所帮助。

关于java - MongoDB/Morphia 将技术 ID 保存为 ObjectId,尽管它在 Java 中是一个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10444786/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com