我正在使用OrientDB 2.1.6 Object API。OrientDB:刪除使用Object API創建的記錄和引用
我有兩個的POJO與這樣的1到N的關係:
public static class Results {
private String userId;
private String templateId;
private Double totalLength;
private List<String> visibleFields;
private Boolean filterable;
@OneToMany(orphanRemoval = true)
private List<ResultItem> items;
//Generic getters and setters
}
public static class ResultItem {
private String id;
private String vsId;
private String entryTemplateId;
private String objectType;
private String objectTypeLabel;
private String capabilityComment;
private Boolean currentVersion;
private Double contentSize;
private String name;
private String objectStoreId;
private String mimeType;
private HashMap<String, String> attributes;
private Date dateLastModified;
//generic getters and setters
}
這OrientDB創建兩個類。如果我使用Object API刪除了一個Results實例,它將正確刪除關聯的ResultItem行。
我想刪除使用「控制檯」這樣的特定ResultItem記錄:
orientdb {db=test}> find references #15:6392 Found
[{rid:#15:6392,referredBy:[1]}] in 0.014000 sec(s).
orientdb {db=test}> delete from ResultItem where @rid=#15:6392 Delete
record(s) '1' in 0.006000 sec(s).
orientdb {db=test}> find references #15:6392 Found
[{rid:#15:6392,referredBy:[1]}] in 0.014000 sec(s).
控制檯輸出表明記錄已被刪除,但它仍然包含一個「參考」。
當我回到Object api並嘗試db.detachAll(results,true)時,這會體現爲一個問題。它拋出了這個我認爲是由於孤兒關係造成的異常。
Caused by: java.lang.NullPointerException
at com.orientechnologies.orient.object.db.OObjectLazyList.convertAndDetachAll(OObjectLazyList.java:456)
at com.orientechnologies.orient.object.db.OObjectLazyList.convertAndDetachAll(OObjectLazyList.java:432)
at com.orientechnologies.orient.object.db.OObjectLazyList.detachAll(OObjectLazyList.java:424)
at com.orientechnologies.orient.object.enhancement.OObjectProxyMethodHandler.detachAll(OObjectProxyMethodHandler.java:165)
at com.orientechnologies.orient.object.enhancement.OObjectEntitySerializer.detachAll(OObjectEntitySerializer.java:261)
at com.orientechnologies.orient.object.db.OObjectDatabaseTx.detachAll(OObjectDatabaseTx.java:809)
at com.orientechnologies.orient.object.db.OObjectDatabaseTx.detachAll(OObjectDatabaseTx.java:327)
如何刪除與記錄一起的關係?
嗨弗雷德裏克,你有一個小的數據庫測試或整個Java代碼來嘗試你的情況? – LucaS
不是。但是,我已經在描述中粘貼了兩個POJO,以及在刪除記錄後顯示殘留引用的控制檯命令。可以通過實例化結果POJO和測試數據並使用Object api保存結果對象來重現。 –