我有一個非常複雜的數據類型的Android java項目,包括其他複雜數據類型的ArrayLists。我試圖使用ORMLite(4.42)將數據存儲在數據庫中。如何將ORMLite與包含其他對象的ArrayLists的對象一起使用?
我有ArrayLists和ForeignCollection之間轉換的主要問題,有沒有人設法做到這一點?
我不想與數據庫連續同步,而是使用保存方法保存整個結構和一個讀取方法來恢復整個方法。從數據庫中恢復對象後,對象將通過接收器期望ArrayLists而不是Orm Lite的ForeignCollections的接口發送。
我的方法如下。對於每個ArrayList,我都有一個互補的ForeignCollection。在將對象存儲到數據庫之前,將ArrayList的內容複製到ForeignCollection中,並在讀回時反之亦然。
當我從數據庫中讀出數據結構時,我希望確保整個結構從以後恢復,這個對象將被髮送給不知道orm lite包的用戶,因此我設置了eager =真正。
我複雜的數據類型,如下所示:
@DatabaseTable(tableName = "accounts")
public class Account {
@DatabaseField(generatedId = true)
private int id;
@ForeignCollectionField (eager = true, maxEagerLevel = 2)
private ForeignCollection<Order> ordersFoC;
private ArrayList<Order> ordersArL;
的問題
帳戶存儲到數據庫之前,我試圖做到以下幾點。我希望將ArrayList中的對象複製到ForeignCollection並使用Account對象更新數據庫。對象myAccount與數據庫中的對象具有相同的id,因此我期望更新該對象。
ordersFoC.addAll(orderArL);
myDao.createOrUpdate(myAccount);
沒有運氣。 addAll方法直接將訂單寫入數據庫,所以我最終得到所有訂單的重複,因爲「addAll」添加並且不更新任何現有記錄。
於是,我就首先從數據庫中刪除所有訂單,但同樣沒有運氣:
ordersFoC.clear(); // Also tried: ordersFoC.removeAll(ordersFoC);
ordersFoC.addAll(orderArL);
myDao.createOrUpdate(myAccount);
的對象不會從數據庫中刪除。我在groups.google.com (by Philip Fu)上讀到,這是ormlite的「已知」問題,渴望的ForeignCollection不能很好地與removeAll()或clear()一起玩。
是否有一種模式,我錯過了,允許我使用ormlite框架來處理包含複雜類型ArrayLists的對象?
參見http:// stackoverflow。com/questions/18441595/how-to-store-the-arraylist-in-ormlite-database/31598771#31598771更簡單的解決方案 – 2015-07-23 22:10:34