如何在插入时从OrientDB获取记录?

时间:2013-08-27 23:19:06

标签: insert nosql orientdb

OrientDB问题......

有人知道如何在插入后获取recordId:

db.save(person)

我在下面尝试了人物POJO:

@Id
private Object id;

但保存后id字段为null。我用Google搜索并用谷歌搜索无济于事。我只需要插入一个对象,然后获取orientdb生成的记录。

5 个答案:

答案 0 :(得分:3)

在pojo中定义字段:

@Id
private Object rid;

public Object getRid() {
    return rid;
}

保存时:

YourClass proxy = db.save(yourClassInstance);
Object rid = proxy.getRid();

答案 1 :(得分:2)

这里的代码很简单:

//insertquery will be the sql statement you want to insert

    ODocument result=db.command(new OCommandSQL(insertquery)).execute();

    System.out.println(result.field("@rid"));

答案 2 :(得分:1)

我使用ODocuments代替POJO(适用于我的项目)。代码示例:

    ODatabaseDocumentTx db  = null;
    ODocument           doc = null;

    db = new ODatabaseDocumentTx("local:" + System.getProperty("user.home") + "/testDB");
    db.create();
    doc = new ODocument("Person");
    doc.field("name", "Peter");
    doc.save();
    String rid = doc.getIdentity().toString();
    List<ODocument> results = db.query(new OSQLSynchQuery<ODocument>("select from " + rid));
    for (ODocument aDoc : results) {
        System.out.println(aDoc.field("name"));
    }
    db.close();

答案 3 :(得分:1)

或者你可以使用OObjectDatabaseTx的getRecordByUserObject(),

OObjectDatabaseTx db = new OObjectDatabaseTx("local:" + System.getProperty("user.home") + "/testDB");

ODocument oDocument = db.getRecordByUserObject( person, true );
oDocument.save();

String rid = oDocument.getIdentity().toString(); 

答案 4 :(得分:0)

如果您已经可以从保存中访问代理对象,则可以完全对其执行冷却以获取具有记录ID(标识)的基础ODocument对象。

Person proxyPerson = db.save(person);

ODocument oDocument = ((OObjectProxyMethodHandler)((ProxyObject)proxyPerson).getHandler()).getDoc();
person.setId(oDocument.getIdentity().toString());