我有 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)
}
@Backlink(to = "epgData")
lateinit var tvchannels: ToMany<TvChannel>
EpgData 实体?这并不是必不可少的,对吗?
假设用户更改了epgSource的时间偏移,并且具有相关epgSourceId(已更改的EpgSource)的EpgData对象的每个startTimeStamp和stopTimeStamp属性都将被调整和更新。 TvChannel 实体的 epgData 是怎么回事?因为它只是与 EpgData 相关,所以我认为 TvChannel 然后使用更新的时间戳,对吗?
主要问题:从数据库中删除 EpgData 对象时会发生什么。例如,我想从数据库中删除旧的 EpgData(日期早于 3 天)。 它不会自动从 TvChannel 实体的 epgData 中删除吗?那么,如果删除的对象是 toMany 关系的一部分,它仍然存在吗? 如果是,删除关系中已删除对象的最佳方法是什么?
问题:假设有 20.000 个 EpgData 对象需要删除,而我有 500 个电视频道(添加多个频道使用相同的 EpgData 对象关系)。当我必须迭代抛出所有通道并逐步删除已删除的 EpgData 时,需要检查/删除大量数据。有没有简单或更容易的方法来做到这一点?或者@Backlink 是这个问题的解决方案吗?
提前致谢,希望 objectbox 专家之一可以帮助初学者爱好开发人员。
反向链接属性是可选的。它基于实际存在的关系。
该关系基于对象 ID。所以是的,当之后获取拥有该关系的对象时,目标对象将具有更新的数据。
如果一个对象被删除,它也会从它所指向的所有关系中删除。