0

私は3つのドメインモデルを持っておりType1Type2以下Detailsの関係に従います。

class Type1 {
  static hasMany = [detail: Detail]
}
class Type2 {
  static hasMany = [detail: Detail]
}
class Detail {
  Type1 type1
  Type2 type2
  static belongsTo = [Type1, Type2]
  static constraints = {
    type1(nullable:true)
    type2(nullable:true)
  }
}

問題は、変換されるたびType1.detailにに転送されないことです(注:Type1とType2はの子にすぎません)。言い換えれば(コントローラー内で):Type2.detailType1Type2java.lang.Object

Type1 type1 = Type1.get(params.id)
List type1Details = Detail.findAllByType1(type1)
type1.detail.clear()

Type2 type2 = new Type2()
// transfer other properties of type1 to type2
type1Details.each { type2.addToDetail(it) }

if(type2.save(flush:true) {
  type1.save(flush:true)
  type1.delete(flush:true)
}

問題は、更新するだけtype1Detailsで、どのように設定できtype1Details*.type1 = nullますtype1Details*.type2 = type2か?

4

1 に答える 1

0

この問題を解決する方法について考えられる一連の指示をすべて試した後、私はこの実用的な解決策にたどり着きました。Details上記の質問から、に関連するすべてを削除し、に関連するテーブルType1のレコードを削除しました。detailType1.detail

Type1 type1 = Type1.get(params.id)
Type2 type2 = new Type2()

// transfer other properties of type1 to type2
type1.detail.each {
  Detail element = (Detail) it
    element.type1 = null
    element.type2 = type2
  }
type1.detail.clear()            
if(type2.save(flush:true)) {
  type1.delete(flush:true)
}

上記のコードから、それがどのように行われるかは明らかです。これが最善の解決策ではないことはわかっていますが、それでもより良い解決策を受け入れることができます。

于 2012-09-17T11:18:36.530 に答える