【问题标题】:How to use gorm cascade update with Grails?如何在 Grails 中使用 gorm 级联更新?
【发布时间】:2011-11-29 18:54:36
【问题描述】:

我的域之间的关系:

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()

首先,我将 sampleAttributescartridgeLane 相关联,然后我找到了我想要更新的 cartridge(链接到 cartridgeLane),最后我要省钱了。

此代码仅INSERT数据(例如:将sampleAttributes 和cartridgeLane 数据添加到墨盒)。
我的问题是我正在寻找 UPDATE(不是 INSERT)。

如何管理级联更新?
gorm 如何区分更新和插入?
有没有更有效的级联更新方式?

【问题讨论】:

    标签: grails grails-orm spring-orm


    【解决方案1】:

    根据您调用更新方法/闭包的方式,您可以利用Grails data binding

    顺便说一句,您的域模型可能会混淆应用程序中的逻辑。很难看到没有更多细节,但看起来您正在尝试使用 Map 或其他东西将属性动态绑定到域类。这种类型的操作将需要您自己编写大量逻辑,并使您的模型复杂化。您可能需要重新考虑设计。

    【讨论】:

      【解决方案2】:

      此级联更新有效:

      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()
      

      【讨论】:

        猜你喜欢
        • 2014-05-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-09
        • 1970-01-01
        相关资源
        最近更新 更多