0

データベースをExcelからインポートする必要があります。データベースの一部は次のようになります。

class Network {

   String externalId
   String name

   static hasMany = [phones: Phone]

   static mapping = {
      phones cascade: 'save-update,delete,all-delete-orphan'
   }
}
class Phone{

   String number

   static belongsTo = [Network]
}

また、Excel レコードを定義するクラスがあります。

class NetworkExcelRecord{
   String externalId
   String name
   String phone1
   String phone2

   public def updateDomain() {
      if (!externalId)
         return null
      Network instance = Network.findByExternalId(externalId) ?: new Network()
      instance.properties = this.properties
      if (instance.isDirty() || !instance.id)
        instance.save(failOnError: true,flush: true)
   }

   private def getPhones() {
    def phonesOld = Network.findByExternalId(externalId)?.phones
    def phonesNew = []
    (1..2).collect {this."phone$it"}.eachWithIndex {String phoneNumber, Integer index ->
        if (phoneNumber) {
            Phone phone = phonesOld.find {it.number == phoneNumber}
            if (!phone)
                phone = new Phone(number: phoneNumber)
            phone.sortOrder = index
            phone.save()
            phonesNew << phone
        }
    }
    phonesNew
   }
}

ただし、参照ネットワーク - 電話は更新されますが、孤立した電話は削除されません。助言がありますか?

4

1 に答える 1

0

クラスで を削除してみてくださいbelongsTo。のマッピングでPhone定義することにより、リレーションシップの保存と削除のカスケードのみを定義するため、は必要ありません。cascadesNetworkbelongsTo

于 2012-09-18T13:56:13.867 に答える