2015-02-11 2 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' не работает, вы можете попробовать использовать [belongsTo] (HTTP : //grails.github.io/grails-doc/latest/ref/Domain%20Classes/belongsTo.html) – user190117

ответ

1

Вы должны сначала удалить ссылку из родителей, а затем удалить ребенку

например

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

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

Он отлично работает, спасибо большое Abdullah vi –

Смежные вопросы