db4o的使用問題-一個環狀引用導致的物件儲存重複--物件的屬性是引用其他物件,如果這個引用物件變化了,db4o也認為物件發生了改變,就儲存兩次??

gltbeyond發表於2008-05-30
大家好,我在學習使用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;
}

相關文章