【问题标题】:ForeignCollection.add() inserts two rows for same objectForeignCollection.add() 为同一个对象插入两行
【发布时间】:2013-01-05 04:46:48
【问题描述】:

我有 3 个课程:

一个

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

C 包含一个用 getEmptyForeignCollection() 构造的急切的 ForeignCollection

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

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

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

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

提前感谢您的帮助。

【问题讨论】:

    标签: ormlite foreign-collection


    【解决方案1】:

    抱歉,回复晚了。

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

    没错。您不必通过添加到BForeignCollection 字段来执行此操作。您可以通过 aDao.create(a) 添加 A 类。那么当你查询B时,foreign-collection会自动包含它。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-11
      • 1970-01-01
      • 1970-01-01
      • 2014-06-17
      • 2020-01-22
      • 1970-01-01
      • 2011-03-05
      相关资源
      最近更新 更多