Grails错误 - 删除的对象将被重新保存

时间:2013-10-25 21:09:25

标签: grails groovy

我试图根据" status"从另一个中删除多个对象。我一直得到"已删除的对象将通过级联重新保存..."错误。

我已经搜索过这个问题,阅读了所有帖子,尝试了各种建议,但仍然无法让它发挥作用。

我有两个相互引用的域名。这是代码。希望有人可以告诉我我做错了什么。而且,我是Grails的新人。如果它倾倒在我身上,那么我仍在学习。

class Room {    
    static def hasMany = [devices : Device]
    static def hasOne = [status: RoomStatus]
    Integer roomId
    String name
    static constraints = {
        roomId unique: true
    }
    static mapping = {
        devices sort:'id', order: 'asc'
    }
}
class Device {
    static def belongsTo = [room: Room]
    static def hasOne = [status: DeviceStatus]
    Integer deviceId
    String name
    static constraints = {
        deviceId nullable: true, unique: true
    }
    static mapping = {
    }
}

这是我用来删除"删除"中所有设备的方法。从房间里说。它在房间控制器中:

def removeDeletedDevices(Long id) {
    def roomInstance = Room.get(id)
    if (!roomInstance) {
        // redirect to error page
        return
    }
    for (def device : roomInstance.devices) {
        if (true == device.status.toString().equals("Deleted")) {
            try {
                device.delete(flush: true)
            } catch (DataIntegrityViolationException e) {
                // report error
                break;
            }
        }
    }
    // redirect to report page.
}

我已经尝试了

  • 删除之前的roomInstance.removeFromDevices(设备)。
  • beforeDelete in Device controller

到目前为止没有运气。我做错了什么?

1 个答案:

答案 0 :(得分:2)

您应该配置关联的级联行为。将devices cascade:"all-delete-orphan"添加到mapping

class Room {    
    static def hasMany = [devices : Device]

    static constraints = {
        ......
    }
    static mapping = {
        devices cascade:"all-delete-orphan"
        ......
    }
}

并且在操作中使用以下代码段进行删除。

<强> EDITED

def devices = Device.findAllByStatusAndRoom("Deleted", roomInstance)
devices.each {
   roomInstance.removeFromDevices(it)
}