使用 Android 上的 OrmLite 保存子集合,其中包含从 Jackson 创建的对象
我有一个REST服务,我从我的应用程序调用它,它拉入一个JSON对象作为一个,然后变成一个很好的嵌套对象集合 - 所有这些位都工作正常。然后我想做的是使用OrmLite将这些对象持久保存到SQLite存储中,这就是事情开始崩溃的地方,因为据我所知,OrmLite不会自动持久化嵌套对象。byte[]
为简单起见,让我们剥离我的实际功能,让我的对象按如下方式建模:
@DatabaseTable(tableName = "parents")
public class Parent {
@DatabaseField(id=true)
private String name;
@ForeignCollectionField
// have to use Collection here because needs to be compatible with Jackson
private Collection<Child> children;
/* Getters and setters go here */
}
@DatabaseTable(tableName = "children")
public class Child {
@DatabaseField(id=true)
private String name;
@DatabaseField(foreign=true)
private Parent parent;
/* Getters and setters go here */
}
发生的情况是,当在数据库中添加具有相应对象的新对象时,子对象不会与父对象一起持久化。Parent
parentDao
这是一个常见的问题,之前已经提出过,SO上肯定还有其他问题与此非常相似,最值得注意的是在Android上使用ORMLite保存嵌套的异物,作为答案,Gray建议在父对象之前创建子对象,这对于手动创建我的POJO来说很好。
但是,我还没有看到一个答案,在对象由另一个库(在本例中为Jackson)生成的情况下,哪些因素会影响到这些因素。在没有深入研究杰克逊的反序列化内脏(这消除了其简单性的全部好处)并试图让杰克逊创建子对象,然后将它们添加到父对象(除非我错过了一些东西,这比听起来更容易?)的情况下,在这种特殊情况下,这似乎不是一个特别有吸引力的解决方案。
同样,还有其他解决方案涉及向外键添加进一步的注释,这些注释似乎适合处理单个子对象,但是在使用 s 及其相应的 s 时,这些注释不可用。@ForeignCollectionField
Collection