2013-08-27 67 views
8

OrientDB問題...如何在插入時從OrientDB獲取記錄ID?

有誰知道我可以插入後得到的recordId:

db.save(person) 

下面我試圖在Person POJO:

@Id 
private Object id; 

但id字段保存後爲空。我google搜索和搜索無濟於事。我只需要插入一個對象,然後獲取orientdb生成的recordid。

回答

1

我得到它使用ODocuments而不是POJOs(它適用於我的項目)。代碼示例:

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(); 
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(); 
3

定義字段POJO:

@Id 
private Object rid; 

public Object getRid() { 
    return rid; 
} 

時節省:

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

如果你已經有了從保存中訪問你的代理對象,你可以完全做一個很酷的強制轉換來獲得具有記錄ID(Identity)的基礎ODocument對象。

Person proxyPerson = db.save(person); 

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

如果你不能使用JPA註釋無論出於何種原因,這非常有用。 – 11101101b

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")); 
+1

另外值得一提的是,如果你處於事務中間,'result.field(「@ rid」)'不會返回真正的RecordID(它返回類似#-1:-2的東西)。雖然在事務提交後,它將返回正確的值。 – Zsolti