我的域名之间的关系:
class Cartridge
{ ...
static hasMany = [cartridgeLanes: CartridgeLane]
static belongsTo = [request:Request]
}
class CartridgeLane
{...
CartridgeLaneSampleAttributes cartridgeLaneSampleAttributes
static belongsTo = [cartridge:Cartridge]
}
class CartridgeLaneSampleAttributes
{...
static belongsTo = CartridgeLane
}
级联更新代码:
def sampleAttributes = new CartridgeLaneSampleAttributes()
sampleAttributes.sampleId = sample.get("ID")
...
def cartridgeLane = new CartridgeLane()
cartridgeLane.laneId = lane.get("ID") as Integer
...
cartridgeLane.cartridgeLaneSampleAttributes = sampleAttributes
def cartridge = Cartridge.findByCartridgeID(cartridgeId)
cartridge.addToCartridgeLanes(cartridgeLane)
cartridge.save()
首先,我将 sampleAttributes 与 cartridgeLane 相关联,然后我找到了我要更新的盒式磁带(链接到 cartridgeLane ),最后我正在保存。
此代码仅 INSERT 数据(例如:将sampleAttributes和cartridgeLane数据添加到盒式磁带)。
我的问题是我正在寻找 UPDATE (不是INSERT)。
如何管理级联更新?
gorm如何将更新与插入区分开来?
是否有更有效的级联更新方法?
答案 0 :(得分:0)
此级联更新有效:
def cartridge = Cartridge.findByCartridgeID(cartridgeId).id as Long
def cartridgeLane = CartridgeLane.findCartridgeLanesByCartridge(cartridge).findByLaneId(laneId)
// Update cartridgeLane domain
cartridgeLane.laneId = lane.get("ID") as Integer
...
// update cartridgeLaneSampleAttributes domain
cartridgeLane.cartridgeLaneSampleAttributes.sampleId = sample.get("ID")
...
cartridgeLane.save()
答案 1 :(得分:0)
根据您调用更新方法/结束的方式,您可以使用Grails data binding。
另外,您的域模型可能会混淆应用程序中的逻辑。很难看到没有更多细节,但看起来你正在尝试使用Map或其他东西动态绑定属性到域类。这种类型的操作需要您自己编写大量逻辑,并使您的模型复杂化。您可能想重新考虑设计。