ObjectBox中ToMany集合的元素顺序是否有保障?是否需新增externalOrder属性?
ObjectBox ToMany集合顺序与显式排序属性问题解答
核心问题解答
1. ToMany集合的顺序是否有保证?
ObjectBox的ToMany关联默认不保证元素顺序。这类关联通过底层关联表存储,没有内置的排序机制,每次从Box中取回集合时,元素顺序可能受查询优化、数据物理存储位置等因素影响,和你当初添加的顺序不一定一致。
2. 是否需要给Bar添加"externalOrder"显式属性?
如果你的业务必须严格保留外部数据导入时的顺序,那必须添加这类排序属性。具体操作:
- 在Bar类里加一个整数类型的属性,比如
int externalOrder;,用来记录每个元素的导入顺序位 - 导入外部数据时,给每个Bar实例分配递增的externalOrder值(比如从0开始依次加1)
- 获取relatedItems后,通过排序来固定顺序,比如调用
foo.relatedItems.sort((a, b) => a.externalOrder.compareTo(b.externalOrder));
代码示例
class Foo { ToMany<Bar> relatedItems; } class Bar { int externalOrder; // 其他业务属性... }
内容的提问来源于stack exchange,提问作者DrKovalex
相关产品推荐
相关产品推荐

