在我最近的 Android 项目中,我使用 OrmLite 来模拟一对多关系以及简单的一对一关系。我注意到,在一对多关系中,子节点在数据库中持有对父节点的外键引用。仍然在加载父对象时,OrmLite 知道要做什么并加载子元素的集合,这当然是所需的行为。
但是,对于简单的一对一关系,似乎需要父对象持有外键列才能实现相同的行为。
所以实际的问题是:当仅在子对象中设置外键时,是否可以让 OrmLite 以一对一的关系加载子对象,因为这是具有一对多关系的标准行为?
这是一些示例代码:
@DatabaseTable
public class Parent
{
@DatabaseField(foreign = true)
private Child1 child1;
@ForeignCollectionField
private Collection<Child2> children2;
}
因此,在孩子 1 和 2 中,我需要像这样引用 Parent:
public class Child1 / Child2
{
@DatabaseField(foreign = true)
private Parent parent;
}
因此,在保存 child2 时,我只需设置
child2.setParent(parent);
child2Dao.create(child2)
但是为了在查询包括 child1 和 child2 在内的父级时达到相同的行为,我必须以相反的方式保存关系:
parent.setChild1(child1)
parentDao.create(parent)
这非常不方便,因为我希望 child1/child2 都持有父母的外键或相反。但是混合物似乎有些难看!
任何想法如何实现这一目标?
我在这里搜索了该问题的答案,但找不到。如果是重复的,对不起!
非常感谢!
编辑:
更准确地说:是否可以在我的 child1 表中设置外键,并且在查询 Parent 时仍然能够获取 child1。ORMLite 会自动为 child2 的外部集合执行此操作。我希望 child1 具有相同的行为。但是当我设置
child1.setParent(parent);
child1Dao.create(child1);
然后进行查询
Parent parent = parentDao.queryForId(1)
由于父表没有对 child1 的引用(外键),因此仅获得 child2。只有 child1 具有对父级的引用。
所以:我想让 Ormlite 自动更新父外键列,或者告诉 Ormlite 仍然获取 child1,即使在父级中没有设置外键(这正是 child2 集合的情况)。这有可能吗?或不?
我希望这不会太令人困惑:) 我完全知道在父级中设置外键会更简单。但我真的不喜欢这种方法,因为我最终会得到一些孩子拥有父母的外键,而另一些则没有。
非常感谢