2013-08-27 5 views
8

OrientDB सवाल ...डालने पर OrientDB से रिकॉर्डिड कैसे प्राप्त करें?

किसी को भी पता है कि कैसे मैं एक डालने के बाद recordId प्राप्त कर सकते हैं:

db.save(person) 

मैं व्यक्ति POJO पर नीचे की कोशिश की:

@Id 
private Object id; 

लेकिन आईडी फ़ील्ड बचाने के बाद शून्य था। मैंने गुमराह किया है और कोई फायदा नहीं हुआ है। मुझे बस एक ऑब्जेक्ट डालने की ज़रूरत है, फिर रिकॉर्डिड प्राप्त करें जो ओरिएंटब उत्पन्न करता है।

उत्तर

1

मुझे पीओजेओ (जो मेरी परियोजना के लिए काम करता है) के बजाय ओडी दस्तावेज़ों का उपयोग करके काम करने के लिए मिला। कोड का नमूना:

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

यदि आपके पास पहले से ही है सहेजने से आपकी प्रॉक्सी ऑब्जेक्ट को कस, आप अंतर्निहित ओडी दस्तावेज़ ऑब्जेक्ट प्राप्त करने के लिए पूरी तरह से एक ठंडा कलाकार कर सकते हैं जिसमें रिकॉर्ड आईडी (पहचान) है।

Person proxyPerson = db.save(person); 

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

यह उपयोगी है अगर आप किसी भी कारण से जेपीए एनोटेशन का उपयोग नहीं कर सकते। – 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") वास्तविक रिकॉर्ड आईडी वापस नहीं करेगा (यह # -1: -2 जैसा कुछ देता है)। हालांकि लेनदेन के बाद किया गया है, यह सही मूल्य वापस कर देगा। – Zsolti

संबंधित मुद्दे