2013-08-27 11 views
8

OrientDB pytanie ...Jak uzyskać recordid z OrientDB na insercie?

Czy ktoś wie jak mogę uzyskać recordID po wkładki:

db.save(person) 

Próbowałem poniżej na osobie POJO:

@Id 
private Object id; 

ale pole id był zerowy po zapisaniu. Mam google i googled bez skutku. Wystarczy wstawić obiekt, a następnie uzyskać recordid generowany przez orientdb.

Odpowiedz

1

Mam go do pracy przy użyciu ODOCuments zamiast POJOs (który działa dla mojego projektu). przykładowy kod:

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

Alternatywnie można skorzystać z getRecordByUserObject() z 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

Zdefiniuj pole w POJO:

@Id 
private Object rid; 

public Object getRid() { 
    return rid; 
} 

Kiedy Save:

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

Jeśli masz już ccess do obiektu proxy z save, możesz całkowicie zrobić fajne rzutowanie, aby uzyskać bazowy obiekt ODocument, który ma identyfikator rekordu (Tożsamość).

Person proxyPerson = db.save(person); 

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

ta jest przydatna, gdy nie można użyć adnotacji WZP z jakiegokolwiek powodu. – 11101101b

2

To tylko prosta oto kod:

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

Warto również wspomnieć, że jeśli jesteś w trakcie transakcji, 'result.field (" @ rid ")' nie zwróci prawdziwego RecordID (zwraca coś w stylu # -1: -2). Chociaż po zatwierdzeniu transakcji, zwróci poprawną wartość. – Zsolti

Powiązane problemy