0

我有 3 节课:

一个

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

C 包含一个用 getEmptyForeignCollection() 构造的热切的 ForeignCollection<A>

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

我创建了一个 A 的实例并将其添加到 B 的 ForeignCollection。这样做会导致 BaseForeignCollection 在数据库表中插入代表 As 的新行。这可以按预期工作(尽管我更愿意手动执行 INSERT)。

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

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

预先感谢您的帮助。

4

1 回答 1

1

很抱歉延迟回复。

我创建了一个 A 的实例并将其添加到 B 的 ForeignCollection。这样做会导致 BaseForeignCollection 在数据库表中插入代表 As 的新行。这可以按预期工作(尽管我更愿意手动执行 INSERT)。

正确的。您不必通过添加到B'ForeignCollection字段来做到这一点。您可以A通过它添加类aDao.create(a)。然后当您查询时B,外部集合将自动包含它。

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

ForeignCollectionA表中的视图。一旦您以任何方式插入一个A,它将自动在关联BC外部集合字段中。如果您使用的是 Eager fetching,那么如果您已经拥有 的实例B并创建A了具有对 的引用的实例B,则需要bDao.refresh(b)更新 foreign-collection 字段。

于 2013-04-16T16:21:49.380 回答