MongoDB Morphia save()生成两个具有相同ID的对象

时间:2014-06-13 11:33:23

标签: java mongodb pojo morphia nosql

我有一个通过Morphia库连接到MongoDB数据库的java应用程序。我存储在数据库中的POJO具有名为_id的String字段,并使用@Id注释进行注释(com.google.code.morphia.annotations.Id;)。

我正在生成一个新对象(它有null _id)。 我在morphia提供的数据存储上调用save(object)。 对象在存储后会更新,现在具有_id值。 我再次调用save(object),并在数据库中使用相同的_id创建一个新条目。 对象上的所有连续save()操作都会覆盖旧操作,并且不会在数据库中生成任何新条目。

因此,例如,在对同一对象进行10次save()调用后,我的数据库最终看起来像这样:

{ "_id" : { "$oid" : "539ade7ee4b0451f28ba0e2e"} , "className" : "blabla" , blabla ...}
{ "_id" : "539ade7ee4b0451f28ba0e2e" , "className" : "blabla" , blabla ...}

正如所见,这两个条目具有相同的_id但具有不同的表示。一个将它作为对象将另一个作为字符串。通常我不应该只有一个条目吗?

1 个答案:

答案 0 :(得分:1)

不要为_id使用字符串。这将解决您的问题:

@Id
protected ObjectId id;

虽然你可以使用protected String id(这不应该创建重复的恕我直言),如果你使用@Reference并且可能遇到其他地方的奇怪边缘情况你会遇到问题,所以尽可能避免使用它。