Morphia 保存新实体而不是更新 _id

发布于 2024-12-02 09:16:20 字数 566 浏览 1 评论 0原文

抱歉问了一个非常愚蠢的问题。 我正在使用 Morphia 1.00。 有一些实体:

@Entity("Vacancy")
public class Vacancy {

@Id
private ObjectId id;
@Version
long version;

private String title;

和一些其他字段、setter 和 getter。 尝试保存相同的实例:

Vacancy vacancy1 = new Vacancy();
vacancy1.setTitle("Dumm");
Vacancy vacancy2 = new Vacancy();
vacancy2.setTitle("Dumm");

vacancyDao.getDatastore().save(vacancy1);
vacancyDao.getDatastore().save(vacancy2);

据我所知,mongoDb 必须执行 upsert 命令(意思是“如果存在则更新;如果丢失则插入(单个文档)”)。 但 mongo 不只是更新 _id 字段,而是将新实体保存在数据库中。

Sorry for very dumb question.
I'm using Morphia 1.00.
Have some entity:

@Entity("Vacancy")
public class Vacancy {

@Id
private ObjectId id;
@Version
long version;

private String title;

and some other fields, setter and getters.
Trying to save identical instances:

Vacancy vacancy1 = new Vacancy();
vacancy1.setTitle("Dumm");
Vacancy vacancy2 = new Vacancy();
vacancy2.setTitle("Dumm");

vacancyDao.getDatastore().save(vacancy1);
vacancyDao.getDatastore().save(vacancy2);

As I know, mongoDb must execute upsert command(means "update if present; insert (a single document) if missing").
But instead of just updating the _id field, mongo saves new entity in the DB.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

安静 2024-12-09 09:16:20

当您没有为要插入的对象(文档)指定 ObjectId 时,morphia 会生成一个“新”ObjectId 并在插入对象(文档)之前设置它。

因此,每个没有 ObjectId 的对象都将被赋予新的且唯一的 objectId,并且该对象将被视为新的“文档”。

如果你想更新,请执行类似的操作

Vacancy vacancy1 = new Vacancy();
vacancy1.setTitle("Dumm");
Vacancy vacancy2 = new Vacancy();
vacancy2.setTitle("Dummmmm");

vacancyDao.getDatastore().save(vacancy1);

vacancy2.setId(vacancy1.getId());
vacancyDao.getDatastore().save(vacancy2);//This line will update the "Dumm" to "Dummmmm"

When you dont specify the ObjectId for an object(document) which you are going to insert, morphia generates a 'new' ObjectId and sets it before the object(document) could inserted.

So, every object which doesn't have the ObjectId will be given new and unique objectId and the object will be treated as new "document".

If you want to update, do something like

Vacancy vacancy1 = new Vacancy();
vacancy1.setTitle("Dumm");
Vacancy vacancy2 = new Vacancy();
vacancy2.setTitle("Dummmmm");

vacancyDao.getDatastore().save(vacancy1);

vacancy2.setId(vacancy1.getId());
vacancyDao.getDatastore().save(vacancy2);//This line will update the "Dumm" to "Dummmmm"
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文