我现在不太明白我的代码中发生了什么。据我了解,groovy 集不包含重复项。但是,我在一组中看到重复项,并且还看到重复项保存到数据库中。虽然从数据库中检索时,重复项不在集合中。
我有两个类(为简洁起见删除了一些属性):
class EntityType {
static hasMany = [attributes: Attribute]
}
class Attribute {
String keyname
}
在我的服务中,我传入一个属性的 jsonarray,这些属性使用type.addToAttributes(attr)
. 如果我多次执行相同的调用,则会将重复项添加到 Set。并且在持久化时,重复项会被持久化。但是,当我从数据库中检索 Set 时,检索到的 Set 没有任何重复。所以最终结果是除了用不必要的数据填充数据库表之外,它似乎没有任何伤害。
我对 Sets 缺少什么?
编辑:这是我刚刚注意到的一些奇怪的事情。不会为所有属性创建重复项。仅创建 n-1 个副本。遍历属性 jsonarry 时,第一个属性不重复,但之后的每个属性都是重复的。所以如果我的数组是 {a:1,b:2,c:3} 它只会创建 b 和 c 的副本。