带有附加列的一对多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 创建于:
- HealthService 1 数量 = 2
- HealthService 2 数量 = 3
修改收据1:
- HealthService 1 已删除
- HealthService 2 修改为数量 = 2
- HealthService 3 数量 = 1
更新后()我有以下内容:
收据 1:
- HealthService 1 数量 = 2
- HealthService 2 数量 = 2
- HealthService 3 数量 = 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
}
在我的 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 创建于:
- HealthService 1 数量 = 2
- HealthService 2 数量 = 3
修改收据1:
- HealthService 1 已删除
- HealthService 2 修改为数量 = 2
- HealthService 3 数量 = 1
更新后()我有以下内容:
收据 1:
- HealthService 1 数量 = 2
- HealthService 2 数量 = 2
- HealthService 3 数量 = 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
}