使用文档 api 在 orient db 中更新

update in orient db using document api

我正在尝试 运行 使用文档 api 进行更新插入,但找不到任何方法或简单的方法。下面是代码,每次我运行,它每次都会插入一条新记录

   public class TestUpsert {

   public static void main(String[] args) {
          Object obj = new Object();
          obj.setRpstryId("ABC");
          obj.setObjId("123");
          obj.setObjIdCntxtCd("456");
          obj.setObjNm("XYZ");
          obj.setObjDesc("text");
          obj.setObjTypId("78901");
          createObject(obj);
   }

   public static void createObject(Object obj) {

          try (ODatabaseDocumentTx db = new ODatabaseDocumentTx(
                       "remote:localhost/abc").open("root", "admin");) {

                 ODocument obj = new ODocument("Object");
                 obj.field("rpstryId", obj.getRpstryId());
                 obj.field("objId", obj.getObjId());
                 obj.field("objIdCntxtCd", obj.getObjIdCntxtCd());
                 obj.field("objTypId", obj.getObjTypId());
                 obj.field("objNm", obj.getObjNm());
                 obj.field("objDesc", obj.getObjDesc());
                 System.out.println("Completed");
                 obj.save();                    
                 db.close();
          } catch (Exception exception) {                   
                 exception.printStackTrace();

          }

   }

您首先需要通过其 ID 检索您的文档,在您的情况下我认为是 ObjIdThere are a few ways to query the database.

List<ODocument> result = db.query(
new OSQLSynchQuery<ODocument>("select * from <table name> where ObjId = '" + obj.getObjId() + "'"));

然后检查是否有记录,如果有可以更新,然后调用save()。

if (result != null and result.size() == 1) {
    // Update here
    ODocument doc = result.get(0);
    doc.field("rpstryId", obj.getRpstryId());
    doc.field("objId", obj.getObjId());
    doc.field("objIdCntxtCd", obj.getObjIdCntxtCd());
    doc.field("objTypId", obj.getObjTypId());
    doc.field("objNm", obj.getObjNm());
    doc.field("objDesc", obj.getObjDesc());
    System.out.println("Completed");
    doc.save();                    
    db.close();
} else {
    System.out.println("Couldn't find the record.");
}

您可以在不检索文档的情况下更新它:

ODocument doc = new ODocument("MyClass", new ORecordId("#9:22"));
doc.field(...);
doc.save

如果记录不存在 ORecordNotFoundException 将被抛出。

我用2.1版本试过了

您可以使用此

更新您的class
//rid will be @rid of the object
db.command(new OCommandSQL("UPDATE Object SET <attribute>=<value> WHERE @rid=<rid>")).execute();