2015-02-11 77 views
0

我将数据保存到我的入口会议表以及入口会议详细信息表(入口会议表的子表)中。但是,当我只想删除一个子表记录时,它提供了一个错误。我不明白该怎么做。我正在使用grails 2.1.0。任何人都可以请帮助我吗?这里是我下面的代码:如何在grails中删除子域行

我父域>>>

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) 
+0

如果'静态映射cascade'不工作,你可以尝试使用[属于关联(HTTP ://grails.github.io/grails-doc/latest/ref/Domain%20Classes/belongsTo.html) – user190117 2015-02-12 09:47:58

回答

1

你应该先解除家长的参考,然后删除子

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

adtEntryMeetingInstance.removeFromAdtEntryMeetingDetails(entryMeetingDetailsDelete) 
entryMeetingDetailsDelete.delete() 
+0

它工作正常,非常感谢阿卜杜拉六世 – 2015-02-12 04:55:47