在我最近的Android Im项目上,使用OrmLite建立一对多关系以及简单的一对一关系。 我注意到,对于一对多关系,子对象持有对数据库中父对象的外键引用。仍然当加载父对象OrmLite知道该怎么做,并加载子元素的集合,这当然是所需的行为。Android OrmLite外键/外键集合
但是,对于简单的一对一关系,父对象似乎需要持有外键列才能实现相同的行为。
所以真正的问题:是否有可能让OrmLite在一对一的关系中加载子对象,因为外键只在子对象中设置,因为它是具有一对多关系的标准行为?
下面是一些示例代码:
@DatabaseTable
public class Parent
{
@DatabaseField(foreign = true)
private Child1 child1;
@ForeignCollectionField
private Collection<Child2> children2;
}
所以在孩子1和2,我需要有这样的参考父:
public class Child1/Child2
{
@DatabaseField(foreign = true)
private Parent parent;
}
因此节省的child2我简单地设置时
child2.setParent(parent);
child2Dao.create(child2)
但是,为了在查询包含child1和child2的父代时达到相同的行为,我将LD必须围绕拯救关系的其他方式:
parent.setChild1(child1)
parentDao.create(parent)
这是非常不方便的,因为我想无论是child1 /的child2都拿着父母的外键或周围的其他方法。但混合似乎有点难看!
任何想法如何实现?
我在这里搜索了这个问题的答案,但没有找到答案。如果它是重复的,我很抱歉!
非常感谢!
编辑:
更准确的说: 是否有可能设置的外键我child1表,仍然能够查询父时获得child1。 ORMLite为child2的外部收集自动完成它。我想要child1的相同行为。 但是,当我设置
child1.setParent(parent);
child1Dao.create(child1);
,然后进行查询
Parent parent = parentDao.queryForId(1)
只的child2因为父表没有引用(外键)的child1获得。只有child1具有对父级的引用。因此:我想要OrmLite自动更新父外键列,或者告诉Ormlite仍然获取child1,即使父代中没有设置外键(因为这与child2的集合情况完全相同)。 这是可能的吗?或不?
我希望这不是太混乱:)我完全知道,只是将外键设置在父项中会更简单。但我真的不喜欢这种方法,因为我最终会得到一些孩子有父母的外键,有些孩子没有。
非常感谢您
非常感谢您为您的快速响应实现这一目标!我完全知道ORM的基本功能,因为Im来自MS实体框架背景。我似乎对自己的问题不太清楚,我会尽力更新。 –
所以请看看编辑。我实际上可能需要类似于@ForeignField(我认为它不存在于OrmLite中),它不存储外键但是告诉ORMLite在查询帐户(父)时包含命令(子) –