我有一个通过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但具有不同的表示。一个将它作为对象将另一个作为字符串。通常我不应该只有一个条目吗?
答案 0 :(得分:1)
不要为_id
使用字符串。这将解决您的问题:
@Id
protected ObjectId id;
虽然你可以使用protected String id
(这不应该创建重复的恕我直言),如果你使用@Reference
并且可能遇到其他地方的奇怪边缘情况你会遇到问题,所以尽可能避免使用它。