grails addTo为hasMany关系输入重复数据

Rob*_*Rob 5 grails groovy has-many

我有一个非常简单的hasMany关系,其中"product"有很多"包".我正在运行一个脚本来尝试填写数据,这在第一次运行时工作正常.但是在第二次运行时,它开始输入重复项,但我对hasMany不可能

package = Package.findBySourceId(packageId) ?: new Package(name:packageName, price:packagePrice, sourceId:packageId).save(flush:true)

product = Product.findBySourceId(productId)                 
product.addToPackages(package)
product.save(flush:true)
Run Code Online (Sandbox Code Playgroud)

当我进行sql登录时,我可以看到有时候应该在addToPackages调用上运行的select不会运行.它只是选择查找产品,然后直接插入连接表.

我不想因为工作而添加确切的查询,但基本上就是这样

Select -> for the initial package which it finds

Select -> for product which it finds by the product id

Insert -> insert into the join table without even a select to check if an entry exists
Run Code Online (Sandbox Code Playgroud)

但是,有时候不是那个插入,它会运行一个select并找到匹配,然后流程将重新开始.不知道这里的grails背后的逻辑.请记住,我有一个运行脚本,用数千行来提取数据,这是一个会话问题吗?

Gre*_*reg 3

您是否在一对多的“多”方面使用过列表或集合?默认值是一个 Set,它应该限制重复。如果您使用列表映射集合,那么您可能已经造成了问题。

或者,验证身份属性“package”对于 equals() 和 hashCode() 是否具有正确的行为。