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

时间:2011-05-17 20:13:07

标签: 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)

当我进行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

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

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)