带有附加列的一对多Grails

grails one to many with additional column

在我的 Grails 项目中,我需要在两个域 class 之间建立 1:N 关系。所以,我创建了以下域 class:

class Receipt_HealthService {

   Receipt receipt
   HealthService healthService
   int quantity = 1

   static constraints = {
     }
}

在收据中我有以下内容:

 @NotNull
static hasMany = [healthServices:Receipt_HealthService]

因此创建了一个新的 table,它具有域 class 和 quantity 字段的 ID。

当我调用 save() 方法时一切正常,但是当我调用 update() 时有些东西不起作用。

如果用户修改收据,删除之前保存的 HealthService 之一,并修改其他的,旧的 HealthServices 将与新的 HealthServices 一起保存。例如:

收据 1 创建于:

修改收据1:

更新后()我有以下内容:

收据 1:

我想这种行为是因为添加了新域 class。我是否可以在 update() 中手动添加 HealthService 的正确保存?

编辑: 之前关于 save() 的问题通过更改代码解决了。我使用的方法在我的代码中不再有用。该方法使用 receiptInstance,在方法调用时,它没有填充数据,因此我在 save() 中遇到了异常。

我已经用下面的代码解决了这个问题。我希望有人给我评论。

receiptInstance.healthServices.collect().each {
        //I've tried to use receiptInstance.healthServices.clear()
        //but Set remains with all items 

        //delete item from Set
        receiptInstance.healthServices.remove(it) 
        //delete item from DB
        it.delete()
    }

         //save with flush to commit the delete
    if (!receiptInstance.save(flush: true)) {
        render(view: "edit", model: [receiptInstance: receiptInstance])
        return
    }