【发布时间】:2011-05-17 20:13:06
【问题描述】:
我有一个非常简单的 hasMany 关系,其中“产品”有很多“包”。我正在运行一个脚本来尝试填写数据,这在第一次运行时运行良好。但是在第二次运行时,它开始输入重复项,我认为这对于 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 -> 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
但是,有时它会运行选择并找到匹配项,而不是插入,然后该过程将重新开始。这里不知道 grails 背后的逻辑。请记住,我有一个正在运行的脚本正在提取数千行的数据,这是某种会话问题吗?
【问题讨论】:
-
你的包类是什么样的?您是否在 sourceId 属性上设置了正确的约束?
-
听起来您正在进行某种非确定性行为。哎呀...