我有两个域类,其中一个与另一个具有一对多关系
Class A
{
...
@NotNull
static hasMany = [bElements:B]
}
Class B
{
...
}
当我运行应用程序时,会创建关系表 A_B 并在用户创建 A 对象时自动添加 A_B 表中的条目。然后我决定改变这个关系,因为我注意到A类和C类之间最好有一个关系,所以A类现在有了
static hasMany = [cElements:C]
但是当我创建一个 A 类型的新对象(在创建一些 C 对象之后),添加一个或多个 C 类型的对象时,在我的数据库中我看不到 A_C 表中的条目,而只在 A 表中。
为什么会发生这种行为?我必须控制什么来解决问题?
编辑:也许需要一些澄清。A类是描述发票的类,C类是描述发票项目的类。所以我需要在这两个类之间给出一个一对多的关系,但是如上所述,它并没有按预期工作......
编辑 2:我注意到问题可能取决于cElements
A 对象中的字段为空的事实。在视图中,我对该cElements
字段进行了如下描述:
<g:select name="receiptItems" from="${HealthService.findAllByDoctor(Doctor.findBySecUser(new ReceiptController().getCurrentlyLoggedUser()))}"
multiple="multiple" optionKey="id"
optionValue="${{it.healthServiceType.healthService}}"
size="5" value="${receiptInstance?.healthServices*.id}" class="many-to-many"
onchange="${remoteFunction(
controller: 'Receipt',
action: 'sumReceiptItems',
params: '\'receiptItemsSelected=\' + jQuery(this).val()',
onSuccess: 'updateTotalAmount(\'totalAmount\', data, \'00000\')')}"/>
这是一个多选。在每次选择之后,使用remoteFunction
调用来自控制器的方法来进行一些计算并更新 totalAmount 字段。它工作得很好但是,当save
方法被调用时,healthServices
字段为空......我不明白为什么......我将打开另一个帖子来解决这个问题(在这里解决)