2013-03-02 101 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

相关问题