2013-03-02 146 views
2

我有一個非常複雜的數據類型的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的對象?

+0

參見http:// stackoverflow。com/questions/18441595/how-to-store-the-arraylist-in-ormlite-database/31598771#31598771更簡單的解決方案 – 2015-07-23 22:10:34

回答

4

我有我的代碼與ArrayLists工作好。我宣佈我的領域是這樣的:

@ForeignCollectionField(eager = true, maxEagerForeignCollectionLevel = 99) 
private Collection<PersonalNameStructure> personalnamestructures = new ArrayList<>(); 

public List<PersonalNameStructure> getPersonalNameStructures() { 
    return new ArrayList<>(personalnamestructures) ; 
} 

因此它創建上飛的ArrayList,而不是試圖保持它的吸氣劑。

很明顯,您可能已經意識到了這一點,但在編寫對象時也需要小心,因爲渴望設置會影響讀取外來集合,它對於外部字段或寫入記錄時不會執行任何操作。

+0

您正在從'personalnamestructures'創建'ArrayList '的新實例。但我只是好奇,你是否檢查過「personalnamestructures」的類型?它有可能是'ArrayList '類型的嗎? – 2016-06-27 20:26:10

相關問題