gpt4 book ai didi

grails (gorm) 集包含并保留重复项

转载 作者:行者123 更新时间:2023-12-02 03:51:36 24 4
gpt4 key购买 nike

我现在不太明白我的代码中发生了什么。据我了解,常规集不包含重复项。但是,我在一组中看到重复项,并且还看到重复项保存到数据库中。虽然从数据库中检索时,重复项不在集合中。

我有两个类(为简洁起见删除了一些属性):

class EntityType {
static hasMany = [attributes: Attribute]
}

class Attribute {
String keyname
}

在我的服务中,我传入了一个 jsonarray 属性,这些属性使用 type.addToAttributes(attr) 添加到 EntityType。如果我多次执行同一个调用,则会将重复项添加到 Set 中。并且在持久化时,重复项被持久化。但是,当我从数据库中检索 Set 时,检索到的 Set 没有任何重复项。所以最终的结果是,除了用不必要的数据填充数据库表之外,它似乎没有任何伤害。

关于 Sets 我错过了什么?

编辑:这是我刚刚注意到的一些奇怪的事情。不会为所有属性创建副本。仅创建 n-1 个重复项。当遍历属性 jsonarry 时,第一个属性不会重复,但之后的每个属性都会重复。因此,如果我的数组是 {a:1,b:2,c:3},它只会创建 b 和 c 的副本。

最佳答案

我想通了。我最终不得不重写 int hashCode()boolean equals(Object o) 方法:

@Override
int hashCode() {
return keyname.hashCode() + id.hashCode()
}

@Override
boolean equals(Object o) {
Attribute other = o as Attribute
return keyname.equals(other.keyname) && id.equals(other.id)
}

虽然我不太喜欢这个,因为如果我添加新属性,它会迫使我更新这些方法,但它现在可以工作。

关于grails (gorm) 集包含并保留重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14237140/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com