db4o的使用問題-一個環狀引用導致的物件儲存重複--物件的屬性是引用其他物件,如果這個引用物件變化了,db4o也認為物件發生了改變,就儲存兩次??
大家好,我在學習使用db4o做一個餐費管理小系統時,當new Purchase,new Meal後,導致Diner,Account出現重複儲存的問題,請兄弟姐妹指教。
共有5個class:
其中使用了List集合類(這個可能是導致問題的主要原因,db4o說Collection作為一個新的物件???)
測試程式使用Meal做入口,new Meal,new Purchase
只儲存db.set(Meal);
Meal(purchaseList)---Purchase---Diner----Account----Desposit.
其中Account的purchaseList又包含Purchase。 形成一個物件環狀引用。
測試時,先new Diner,new Account;
第一輪測試 Purchase,Meal時,Diner,Account儲存沒問題,沒有重複。
第二輪測試,new Purchase,new Meal時,Diner,Account成倍了,第二次的Account餘額不一樣;Diner指向的Account也不一樣。。
莫非物件的屬性是引用其他物件,如果這個引用物件變化了,db4o也認為物件發生了改變,就儲存兩次??
Meal{
private double balance; //可用餘額=despositAmount-purchaseAmount--每次統計
private double purchaseAmount; //購買支付總額--每次統計
private double despositAmount; //存款總額--每次統計
private double initPurchaseAmt; //初始欠費
private double initDespositAmt; //初始存款
private List purchaseList; //購買明細--存放歷史明細
private List depositList; //存款明細-交款--存放歷史明細
}
Purchase{
private String desc;
private double price;
private Date dateTime;
private int buyingType;
// 參與支付的人員
private List dinerList;
}
Diner{
private String name;
private String comment;
private String phone;
private Account account; //用餐者賬戶
}
Account{
private double balance; //可用餘額=despositAmount-purchaseAmount--每次統計
private double purchaseAmount; //購買支付總額--每次統計
private double despositAmount; //存款總額--每次統計
private double initPurchaseAmt; //初始欠費
private double initDespositAmt; //初始存款
private List purchaseList; //購買明細--存放歷史明細
private List depositList; //存款明細-交款--存放歷史明細
}
Desposit{
private double amount;
private Date dateTime;
private String desc;
}
共有5個class:
其中使用了List集合類(這個可能是導致問題的主要原因,db4o說Collection作為一個新的物件???)
測試程式使用Meal做入口,new Meal,new Purchase
只儲存db.set(Meal);
Meal(purchaseList)---Purchase---Diner----Account----Desposit.
其中Account的purchaseList又包含Purchase。 形成一個物件環狀引用。
測試時,先new Diner,new Account;
第一輪測試 Purchase,Meal時,Diner,Account儲存沒問題,沒有重複。
第二輪測試,new Purchase,new Meal時,Diner,Account成倍了,第二次的Account餘額不一樣;Diner指向的Account也不一樣。。
莫非物件的屬性是引用其他物件,如果這個引用物件變化了,db4o也認為物件發生了改變,就儲存兩次??
Meal{
private double balance; //可用餘額=despositAmount-purchaseAmount--每次統計
private double purchaseAmount; //購買支付總額--每次統計
private double despositAmount; //存款總額--每次統計
private double initPurchaseAmt; //初始欠費
private double initDespositAmt; //初始存款
private List purchaseList; //購買明細--存放歷史明細
private List depositList; //存款明細-交款--存放歷史明細
}
Purchase{
private String desc;
private double price;
private Date dateTime;
private int buyingType;
// 參與支付的人員
private List dinerList;
}
Diner{
private String name;
private String comment;
private String phone;
private Account account; //用餐者賬戶
}
Account{
private double balance; //可用餘額=despositAmount-purchaseAmount--每次統計
private double purchaseAmount; //購買支付總額--每次統計
private double despositAmount; //存款總額--每次統計
private double initPurchaseAmt; //初始欠費
private double initDespositAmt; //初始存款
private List purchaseList; //購買明細--存放歷史明細
private List depositList; //存款明細-交款--存放歷史明細
}
Desposit{
private double amount;
private Date dateTime;
private String desc;
}
相關文章
- Java物件及物件引用變數Java物件變數
- Vector儲存物件的一個問題物件
- 一個物件多處引用的維護問題物件
- 物件與物件引用的區別物件
- 值物件與引用物件物件
- 使用final關鍵字修飾一個變數時,是引用不能變,還是引用的物件不能變?變數物件
- js使用id屬性值就可以引用一個物件JS物件
- 引用物件與例項物件物件
- python中的引用傳遞,可變物件,不可變物件,list注意點Python物件
- Java中容器Vectort用add新增物件是物件引用的問題Java物件
- java中的引用物件Java物件
- PHP物件的引用及物件優化策略PHP物件優化
- Python中的物件引用、可變性和垃圾回收Python物件
- 給物件引用變數賦值(轉)物件變數賦值
- 物件儲存物件
- PHP物件導向之&引用PHP物件
- PHP 物件導向 (四)類物件賦值為引用傳遞PHP物件賦值
- java物件頭的兩種儲存Java物件
- 物件儲存的優勢有哪些?為什麼要選擇物件儲存?物件
- JAVA 物件引用,以及物件賦值Java物件賦值
- 什麼是物件儲存?物件
- 物件和函式的區別就是物件可以儲存狀態物件函式
- 儲存—物件儲存_Minio物件
- JS物件繼承時,對引用屬性的處理JS物件繼承
- javascript基礎(物件,物件屬性,屬性基本和引用資料型別,字面量建立物件,垃圾回收,屬性的列舉)(十三)JavaScript物件資料型別
- PHP中物件的引用傳遞PHP物件
- 物件的引用計數與dealloc物件
- 6、消除過期的物件引用物件
- JavaScript引用物件的途徑(轉)JavaScript物件
- 使用NSUserDefault儲存物件模型物件模型
- Python學習之變數、物件和引用Python變數物件
- std::io::BufReader 物件借用和引用的問題物件
- 塊儲存 檔案儲存 物件儲存物件
- 物件儲存服務中物件業務的非標介面物件
- 物件儲存 vs 檔案儲存 vs 塊儲存,選哪個?物件
- 由 System.arraycopy 引發的鞏固:物件引用 與 物件 的區別物件
- php中物件是引用型別嗎?PHP物件型別
- 建議:消除過期的物件引用。物件