对象框关系:更新/删除对象时自动更新/删除toMany

问题描述 投票:0回答:1

我有 3 个关于将 toMany 关系与 objectbox 数据库一起使用的问题。假设我有一个电视频道实体:

@Entity
data class TvChannel(
        @Id var id: Long = 0,
        var name: String? = "",
    var epgChId: String? = ""
)
{
    lateinit var epgData: ToMany<EpgData>
} 

和 EpgData 实体:

data class EpgData(
        @Id var id: Long = 0,
        var name: String? = "",
    var epgChId: String? = "",
    var epgSourceId: Long? = null,
    var date: String? = "",
    var startTimeStamp: Long? = null,
    var stopTimeStamp: Long? = null
)

将 EpgData 添加到电视频道:

for (chann in channels) {
val epg = withContext(Dispatchers.IO) {
    epgDataBox.query(EpgData_.epgChId.equal(chann.epgChId)
       .and(EpgData_.date.equal(todayDateString)))
       .build().find()
  }
chann.epgData.addAll(epg)
tvChannBox.put(chann)
}
  1. 当不同频道可以有相同的epgChId /相同的EpgData时,我什么时候也应该添加
@Backlink(to = "epgData")
 lateinit var tvchannels: ToMany<TvChannel>

EpgData 实体?这并不是必不可少的,对吗?

  1. 假设用户更改了epgSource的时间偏移,并且具有相关epgSourceId(已更改的EpgSource)的EpgData对象的每个startTimeStamp和stopTimeStamp属性都将被调整和更新。 TvChannel 实体的 epgData 是怎么回事?因为它只是与 EpgData 相关,所以我认为 TvChannel 然后使用更新的时间戳,对吗?

  2. 主要问题:从数据库中删除 EpgData 对象时会发生什么。例如,我想从数据库中删除旧的 EpgData(日期早于 3 天)。 它不会自动从 TvChannel 实体的 epgData 中删除吗?那么,如果删除的对象是 toMany 关系的一部分,它仍然存在吗? 如果是,删除关系中已删除对象的最佳方法是什么?

问题:假设有 20.000 个 EpgData 对象需要删除,而我有 500 个电视频道(添加多个频道使用相同的 EpgData 对象关系)。当我必须迭代抛出所有通道并逐步删除已删除的 EpgData 时,需要检查/删除大量数据。有没有简单或更容易的方法来做到这一点?或者@Backlink 是这个问题的解决方案吗?

提前致谢,希望 objectbox 专家之一可以帮助初学者爱好开发人员。

android android-database objectbox objectbox-android
1个回答
0
投票
  1. 反向链接属性是可选的。它基于实际存在的关系。

  2. 该关系基于对象 ID。所以是的,当之后获取拥有该关系的对象时,目标对象将具有更新的数据。

  3. 如果一个对象被删除,它也会从它所指向的所有关系中删除。

© www.soinside.com 2019 - 2024. All rights reserved.