gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 14:02:17 25 4
gpt4 key购买 nike

我正在尝试根据“状态”从另一个对象中删除几个对象。我不断收到“删除的对象将被级联重新保存...”错误。

我已经搜索了这个问题,阅读了所有帖子,尝试了各种建议,但仍然无法正常工作。

我有两个互相引用的域。这是代码。希望有人能告诉我我在做什么错。而且,我是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 = {
}
}

这是我用来从房间中删除所有处于“已删除”状态的设备的方法。它在房间 Controller 中:
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(device)。
  • before在设备 Controller 中删除

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

    最佳答案

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

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

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

    实际上,请使用以下代码段进行删除。

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

    关于grails - Grails错误-删除的对象将重新保存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19599467/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com