Как использовать каскадное обновление gorm с Grails? - PullRequest
0 голосов
/ 29 ноября 2011

Отношения между моими доменами:

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 с картридж-лейн , затем я нахожу картридж , который я хочу обновить (ссылаюсь на картридж-лейн ), и, наконец, я сохраняю.

Этот код содержит только INSERT данные (например, добавление sampleAttributes и channelLane data в картридж).
Моя проблема в том, что я ищу UPDATE (не INSERT).

Как я могу управлять каскадным обновлением?
Как gorm отличает обновление от вставки?
Существует ли более эффективный способ каскадного обновления?

Ответы [ 2 ]

0 голосов
/ 01 декабря 2011

В зависимости от того, как вы называете свой метод / закрытие обновления, вы можете использовать привязку данных Grails .

Кроме того, модель вашего домена может запутывать логику вваше приложение.Трудно увидеть без подробностей, но похоже, что вы пытаетесь динамически связать атрибуты с классом домена, используя Map или что-то еще.Этот тип манипуляции потребует от вас написать много логики и усложнить вашу модель.Вы можете пересмотреть дизайн.

0 голосов
/ 30 ноября 2011

Это каскадное обновление работает:

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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...