ForeignCollection.add()为同一对象插入两行

时间:2013-01-05 04:46:48

标签: ormlite foreign-collection

我有3节课:

一个

B包含急切的ForeignCollection< A>用getEmptyForeignCollection()构造的

C包含急切的ForeignCollection< A>用getEmptyForeignCollection()

构造的

我通过调用create()创建B和C的实例,并将行插入到各自的数据库表中。到目前为止,非常好。

我创建了A的实例,然后将其添加到B的ForeignCollection中。这样做会导致BaseForeignCollection在数据库表中插入表示As的新行。这按预期工作(虽然我宁愿手动执行INSERT。)

但是当我向C的ForeignCollection添加相同的A实例时,这会导致BaseForeignCollection将另一行INSERT到表示As的数据库表中。这是不可取的,因为A已经存在。

我做错了什么,或者这是一个错误?有没有办法做我需要做的事情?

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

抱歉延迟回复。

  

我创建了A的实例,然后将其添加到B的ForeignCollection中。这样做会导致BaseForeignCollection在数据库表中插入表示As的新行。这按预期工作(虽然我宁愿手动执行INSERT。)

右。您不必通过添加到B的{​​{1}}字段来执行此操作。您只需通过ForeignCollection添加A课程即可。然后,当您查询aDao.create(a)时,外部集合将自动包含它。

  

但是当我向C的ForeignCollection添加相同的A实例时,这会导致BaseForeignCollection将另一行INSERT到表示As的数据库表中。这是不可取的,因为A已经存在。

BForeignCollection表的视图。一旦您以任何方式插入A,它将自动位于关联的AB外国收集字段中。如果您正在使用预先提取,那么如果您已经拥有C的实例并且创建了引用B的{​​{1}},则需要A来更新了foreign-collection字段。