从 Objectbox 查询返回的对象是否与 ToMany<> 关系中的对象相同?
Is the returned object from an Objectbox query the same instance than the object in the ToMany<> relation?
感谢您在 ObjectBox 上所做的工作,我最近发现了它,它太棒了:)
然而,我有一个我不明白的问题:我尝试使用查询,尤其是 "find" 和 "findFirst" 查询。我尝试从盒子中取出一个特定的对象,以便 return 它,并将它从盒子中移除。
我的代码是 (抱歉,它是法语的) :
public DeplacementProvoque recupererEtRetirerDeplacementProvoque() {
QueryBuilder<DeplacementProvoque> builder = DeplacementProvoque.deplacementProvoqueBox.query();
builder.equal(DeplacementProvoque_.deplacementsProvoquesAssocieId, this.id)
.equal(DeplacementProvoque_.estEnSursis, false);
DeplacementProvoque deplacementProvoque = builder.build().findFirst(); // <<<< Use the Query
listeDeplacementsProvoques.remove(deplacementProvoque); // <<<< Try to remove the object
return deplacementProvoque;
}
我注意到从查询中得到的 DeplacementProvoque 是好的对象(与预期的 ID 相同)但不是同一个实例。所以 remove() 不起作用。
我可以通过迭代 ToMany<> 列表来识别对象的良好实例并将其删除来解决这个问题。
但我想知道这种行为是正常的,还是我做错了什么?也许我错误地使用了 ToMany<> 列表,导致了这个结果?
谢谢:)
朱利安
PS : 对于我可能的英语错误感到抱歉
回答标题问题:不会,查询时总是得到一个最新数据的新实例。
要回答您的实际问题:假设 listeDeplacementsProvoques
是 ToMany
(您没有指定),您可以使用 ToMany.removeById(entityId)
.
或者,您可以为 DeplacementProvoque
实体实施 hashCode()
和 equals()
。然后 ToMany.remove(entity)
将按预期工作。
感谢您在 ObjectBox 上所做的工作,我最近发现了它,它太棒了:)
然而,我有一个我不明白的问题:我尝试使用查询,尤其是 "find" 和 "findFirst" 查询。我尝试从盒子中取出一个特定的对象,以便 return 它,并将它从盒子中移除。
我的代码是 (抱歉,它是法语的) :
public DeplacementProvoque recupererEtRetirerDeplacementProvoque() {
QueryBuilder<DeplacementProvoque> builder = DeplacementProvoque.deplacementProvoqueBox.query();
builder.equal(DeplacementProvoque_.deplacementsProvoquesAssocieId, this.id)
.equal(DeplacementProvoque_.estEnSursis, false);
DeplacementProvoque deplacementProvoque = builder.build().findFirst(); // <<<< Use the Query
listeDeplacementsProvoques.remove(deplacementProvoque); // <<<< Try to remove the object
return deplacementProvoque;
}
我注意到从查询中得到的 DeplacementProvoque 是好的对象(与预期的 ID 相同)但不是同一个实例。所以 remove() 不起作用。
我可以通过迭代 ToMany<> 列表来识别对象的良好实例并将其删除来解决这个问题。
但我想知道这种行为是正常的,还是我做错了什么?也许我错误地使用了 ToMany<> 列表,导致了这个结果?
谢谢:)
朱利安
PS : 对于我可能的英语错误感到抱歉
回答标题问题:不会,查询时总是得到一个最新数据的新实例。
要回答您的实际问题:假设 listeDeplacementsProvoques
是 ToMany
(您没有指定),您可以使用 ToMany.removeById(entityId)
.
或者,您可以为 DeplacementProvoque
实体实施 hashCode()
和 equals()
。然后 ToMany.remove(entity)
将按预期工作。