2013-08-27 13 views
8

OrientDB domanda ...Come ottenere un recordid da OrientDB su insert?

Qualcuno sa come posso ottenere il recordId dopo un inserimento:

db.save(person) 

ho provato in basso a persona POJO:

@Id 
private Object id; 

ma il campo id era nullo dopo il salvataggio. Ho cercato su google e su Google senza successo. Ho solo bisogno di inserire un oggetto, quindi ottenere il recordid generato da orientdb.

risposta

1

Ho capito che funziona utilizzando ODocuments anziché POJOs (che funziona per il mio progetto). Esempio di codice:

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

In alternativa si può fare uso di getRecordByUserObject() di 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

Definire campo in POJO:

@Id 
private Object rid; 

public Object getRid() { 
    return rid; 
} 

Quando salvataggio:

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

Se hai già un ccessando al proprio oggetto proxy dal salvataggio, è possibile creare un cast interessante per ottenere l'oggetto ODocument sottostante che ha un ID record (Identità).

Person proxyPerson = db.save(person); 

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

Questo è utile se non è possibile utilizzare le annotazioni JPA per qualsiasi motivo. – 11101101b

2

E 'solo semplice ecco il codice:

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

Inoltre vale la pena menzionare che, se ci si trova nel mezzo di una transazione, 'result.field (" @ rid ")' non restituirà il vero RecordID (restituisce qualcosa come # -1: -2). Sebbene dopo il commit della transazione, verrà restituito il valore corretto. – Zsolti