0

私のドメイン間の関係:

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をcardcatLaneにリンクし、次に更新するカートリッジを見つけて(cardcatLaneリンクします)、最後に保存します。

このコードはデータを挿入するだけです(例:sampleAttributesとcarditchLaneデータをカートリッジに追加します)。
私の問題は、(INSERTではなく)UPDATEを探していることです。

カスケード更新を管理するにはどうすればよいですか?
gormは更新と挿入をどのように区別しますか?
更新をカスケードするためのより効率的な方法はありますか?

4

2 に答える 2

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()
于 2011-11-29T21:54:20.607 に答える
0

更新メソッド/クロージャの呼び出し方法によっては、 Grailsデータバインディングを利用できる場合があります。

余談ですが、ドメインモデルがアプリケーションのロジックをわかりにくくしている可能性があります。詳細がないとわかりにくいですが、Mapなどを使用してドメインクラスに動的にバインドされた属性を設定しようとしているようです。このタイプの操作では、多くのロジックを自分で作成する必要があり、モデルが複雑になります。デザインを再考することをお勧めします。

于 2011-11-30T22:38:45.017 に答える