【问题标题】:How to delete a child domain row in grails如何在grails中删除子域行
【发布时间】:2015-02-11 10:29:22
【问题描述】:

我正在将数据保存到我的条目会议表以及条目会议详细信息表中,该表格是条目会议表的子表。但是当我只想删除一个子表记录时,它会出错。我不明白该怎么做。我正在使用 grails 2.1.0。谁能帮我解决这个问题?!!!下面是我的代码:

我的父域 >>>

class AdtEntryMeeting {
    static mapping = {
        table('ADT_ENTRY_MEETING')
        version(false)
        entryMeetingDetails cascade: 'all'
    }
    String meetingVenue
    Date meetingDate = new Date()
    String meetingTime
    long CREATED_BY=0
    Date CREATED_DATE=new Date()
    long UPDATED_BY=0
    Date UPDATED_DATE=new Date()
    static hasMany = [entryMeetingDetails: AdtEntryMeetingDetails]
    static constraints = {
        meetingVenue(nullable: false, blank: false)
        meetingDate(nullable: false)
        meetingTime(nullable: false, blank: false)
        CREATED_BY(nullable:true)
        CREATED_DATE(nullable:true)
        UPDATED_BY(nullable: true)
        UPDATED_DATE(nullable: true)
    }
    String toString(){
        return id
    }
}

我的子域 >>>

class AdtEntryMeetingDetails {
    static mapping = {
        table('ADT_ENTRY_MEETING_DETAILS')
        version(false)
    }
    AuditFirm auditPack
    AuditorDtl auditor
    String meetingSubject
    String responsiblePerson
    AdtEntryMeeting entryMeeting
    static constraints = {
        auditPack(nullable: false, blank: false)
        auditor(nullable: false, blank: false)
        meetingSubject(nullable: false, blank: false)
        responsiblePerson(nullable: false, blank: false)
        entryMeeting(nullable: false, blank: false)
    }
    String toString(){
        return auditPack
    }
}

我要删除的操作 >>>

if(params[isDelete + detailsCounter] == 'delete'){
                def entryMeetingDetailsDelete = AdtEntryMeetingDetails.get(Long.parseLong(params[entryMeetingDetailsId + detailsCounter]))
                entryMeetingDetailsDelete.delete()
            }else{
                def entryMeetingDetailsEdit = AdtEntryMeetingDetails.get(Long.parseLong(params[entryMeetingDetailsId + detailsCounter]))
                entryMeetingDetailsEdit.properties['auditPack'] = AuditFirm.get(Long.parseLong(params[auditPack + detailsCounter]))
                entryMeetingDetailsEdit.properties['auditor'] = AuditorDtl.get(Long.parseLong(params[auditor + detailsCounter]))
                entryMeetingDetailsEdit.properties['meetingSubject'] = params[meetingSubject + detailsCounter]
                entryMeetingDetailsEdit.properties['responsiblePerson'] = params[responsiblePerson + detailsCounter]
                adtEntryMeetingInstance.addToEntryMeetingDetails(entryMeetingDetailsEdit)
            }

我得到的错误>>>

deleted object would be re-saved by cascade (remove deleted object from associations)

【问题讨论】:

  • 如果static mapping cascade不起作用,您可以尝试使用belongsTo

标签: oracle grails grails-orm grails-2.0 grails-domain-class


【解决方案1】:

您应该先从父级中删除引用,然后再删除子级

例如

def entryMeetingDetailsDelete = AdtEntryMeetingDetails.get(Long.parseLong(params[entryMeetingDetailsId + detailsCounter]))

adtEntryMeetingInstance.removeFromAdtEntryMeetingDetails(entryMeetingDetailsDelete)
 entryMeetingDetailsDelete.delete()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 2011-04-24
    • 1970-01-01
    • 1970-01-01
    • 2017-08-28
    • 2016-08-20
    相关资源
    最近更新 更多