Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 强制morphia覆盖现有条目的干净方法_Java_Mongodb_Morphia - Fatal编程技术网

Java 强制morphia覆盖现有条目的干净方法

Java 强制morphia覆盖现有条目的干净方法,java,mongodb,morphia,Java,Mongodb,Morphia,我正在从一个sql数据库获取信息,并使用morphia将它们移动到mongo中。我们在SQL端检测增量更改,并将更改的值导入Monog,但我的第一次尝试没有成功,因为我在DB中同时使用了旧条目和新条目,而不是将旧条目与新条目一起丢弃 我的下一个方法是获取“sqlID”字段并用@id标记它。这满足了我的要求,但也阻止了将sqlID添加为普通字段。当我想在mongo中查询sqlID时,查询就不再有效了 我发现的其他建议是对mongo进行查询,以获取当前的@id,然后将其保存,并编写一个自定义查询,覆

我正在从一个sql数据库获取信息,并使用morphia将它们移动到mongo中。我们在SQL端检测增量更改,并将更改的值导入Monog,但我的第一次尝试没有成功,因为我在DB中同时使用了旧条目和新条目,而不是将旧条目与新条目一起丢弃

我的下一个方法是获取“sqlID”字段并用@id标记它。这满足了我的要求,但也阻止了将sqlID添加为普通字段。当我想在mongo中查询sqlID时,查询就不再有效了

我发现的其他建议是对mongo进行查询,以获取当前的@id,然后将其保存,并编写一个自定义查询,覆盖现有表中的每个字段(如果存在)。我不喜欢前一个选项,因为它需要对我从sql中提取的每一行进行额外的mongo查询,而我使用的数据量太昂贵了。后者可以,但考虑到一条记录中有多少字段,我真的不想手动写出一个查询来覆盖每个字段

我目前的懒惰做法是将sqlID保存两次,一次作为@id,一次作为普通字段。它做了我想做的,但仍然感觉像黑客(如果我说是的话,这是一个词!)


在保存到mongo时,是否有更简单的方法来指定字段并说“如果此字段已存在,则覆盖”呢?

我只需在我的morphia模型中创建一个专门的构造函数,它将DB对象作为参数,并在那里进行映射,例如

public MyModel(WhatEverDbObject rdbmsEntity){
  this.idField = rdbmsEntity.sqlId;
  // set the other fields as required
}
接下来,您可以迭代RDBMS中更改的实体,只需将RDBMS实体传递给构造函数,即可为MongoDB创建实体。保存它们应该和在@Id字段上进行查询一样简单


我不明白为什么不能将您的sqlID用作@Id。请检查您的sqlID是否可以转换为您用于@Id的任何类型。如果有疑问,只需使用字符串,它就可以工作。

我可以使用sqlID作为mongo Id。我的问题是,如果将Id标记为mongo Id,它将以不同的方式保存Id。如果我向其添加mongo Id,则不再创建sqlID字段,也不再有任何方法基于结果mongo db中的sqlID进行提取。