2013-08-27 3 views
8

Orientdb Frage ...Wie bekomme ich eine Recordid von OrientDB beim Einfügen?

Wer weiß, wie ich die recordID nach einem Einsatz bekommen:

db.save(person) 

ich unten auf der Person POJO versucht:

@Id 
private Object id; 

aber das ID-Feld war nach dem Speichern null. Ich habe gegoogelt und gegoogelt, ohne Erfolg. Ich muss nur ein Objekt einfügen, dann die Recordid, die Orientdb erzeugt.

Antwort

1

Ich habe es mit ODocuments statt POJOs funktionieren (was für mein Projekt funktioniert). Codebeispiel:

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

Alternativ können Sie nutzen getRecordByUserObject() von OObjectDatabaseTx,

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

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

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

definieren Feld in pojo machen:

@Id 
private Object rid; 

public Object getRid() { 
    return rid; 
} 

Wenn save:

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

Wenn Sie bereits eine haben Zugriff auf Ihr Proxy-Objekt aus dem Speichern, können Sie eine coole Umwandlung durchführen, um das zugrunde liegende ODocument-Objekt zu erhalten, das eine Datensatz-ID (Identität) hat.

Person proxyPerson = db.save(person); 

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

Dies ist nützlich, wenn Sie nicht JPA Anmerkungen aus irgendeinem Grund verwenden können. – 11101101b

2

Es ist nur hier einfach ist der Code:

//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

Es ist auch wichtig zu erwähnen, dass, wenn Sie mitten in einer Transaktion sind, das 'result.field (" @ rid ")' nicht die tatsächliche RecordID zurückgibt (es gibt etwas wie # -1: -2 zurück). Obwohl nach dem Festschreiben der Transaktion der korrekte Wert zurückgegeben wird. – Zsolti

Verwandte Themen