【问题标题】:all-delete-orphan ignored?全删除孤儿忽略?
【发布时间】:2012-09-18 21:56:13
【问题描述】:

我必须从 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
   }
}

但引用网络 - 电话会更新,但孤立电话不会被删除。有什么建议吗?

【问题讨论】:

    标签: grails grails-orm


    【解决方案1】:

    尝试删除 Phone 类中的 belongsTo。通过在Network 的映射中定义cascades,您就不需要belongsTo,因为它只定义了关系的保存-删除级联。

    【讨论】:

      猜你喜欢
      • 2011-01-02
      • 2012-10-22
      • 2012-02-07
      • 2010-09-23
      • 2014-10-07
      • 2013-06-05
      • 2011-02-09
      • 2012-08-16
      相关资源
      最近更新 更多