OrientDB問題...如何在插入時從OrientDB獲取記錄ID?
有誰知道我可以插入後得到的recordId:
db.save(person)
下面我試圖在Person POJO:
@Id
private Object id;
但id字段保存後爲空。我google搜索和搜索無濟於事。我只需要插入一個對象,然後獲取orientdb生成的recordid。
OrientDB問題...如何在插入時從OrientDB獲取記錄ID?
有誰知道我可以插入後得到的recordId:
db.save(person)
下面我試圖在Person POJO:
@Id
private Object id;
但id字段保存後爲空。我google搜索和搜索無濟於事。我只需要插入一個對象,然後獲取orientdb生成的recordid。
我得到它使用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();
或者您可以利用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();
定義字段POJO:
@Id
private Object rid;
public Object getRid() {
return rid;
}
時節省:
YourClass proxy = db.save(yourClassInstance);
Object rid = proxy.getRid();
如果你已經有了從保存中訪問你的代理對象,你可以完全做一個很酷的強制轉換來獲得具有記錄ID(Identity)的基礎ODocument對象。
Person proxyPerson = db.save(person);
ODocument oDocument = ((OObjectProxyMethodHandler)((ProxyObject)proxyPerson).getHandler()).getDoc();
person.setId(oDocument.getIdentity().toString());
這只是簡單的這裏是代碼:
//insertquery will be the sql statement you want to insert
ODocument result=db.command(new OCommandSQL(insertquery)).execute();
System.out.println(result.field("@rid"));
另外值得一提的是,如果你處於事務中間,'result.field(「@ rid」)'不會返回真正的RecordID(它返回類似#-1:-2的東西)。雖然在事務提交後,它將返回正確的值。 – Zsolti
如果你不能使用JPA註釋無論出於何種原因,這非常有用。 – 11101101b