2013-08-27 68 views
8

OrientDB câu hỏi ...Làm thế nào để có được bản ghi từ OrientDB khi chèn?

Có ai biết làm thế nào tôi có thể nhận được recordID sau chèn:

db.save(person) 

tôi đã cố gắng dưới đây trên Person POJO:

@Id 
private Object id; 

nhưng lĩnh vực id đã được null sau khi lưu. Tôi đã googled và googled vô ích. Tôi chỉ cần chèn một đối tượng, sau đó lấy recordid mà orientdb tạo ra.

Trả lời

1

Tôi đã làm cho nó hoạt động bằng cách sử dụng ODocuments thay vì POJO (hoạt động cho dự án của tôi). Mẫu mã:

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

Hoặc bạn có thể tận dụng getRecordByUserObject() của 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

Xác định lĩnh vực trong POJO:

@Id 
private Object rid; 

public Object getRid() { 
    return rid; 
} 

Khi tiết kiệm:

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

Nếu bạn đã có ccess đối với đối tượng proxy của bạn từ lưu, bạn hoàn toàn có thể làm một dàn diễn viên thú vị trên nó để lấy đối tượng ODocument bên dưới có một ID bản ghi (Identity).

Person proxyPerson = db.save(person); 

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

này rất hữu ích nếu bạn không thể sử dụng chú thích JPA vì lý do gì. – 11101101b

2

Nó chỉ đơn giản ở đây là mã:

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

Ngoài ra nó cũng đáng nói, nếu bạn đang ở giữa một giao dịch, 'result.field (" @ rid ")' sẽ không trả về RecordID thực (nó trả về một cái gì đó như # -1: -2). Mặc dù sau khi giao dịch đã được cam kết, nó sẽ trả lại giá trị chính xác. – Zsolti

Các vấn đề liên quan