如何删除 grails 中的 child 域行
How to delete a child domain row in grails
我正在将数据保存到我的入门会议 table 以及入门会议详细信息 table,这是入门会议 child table table .但是当我只想删除 child table 记录时,它会出错。我不知道该怎么办。我正在使用 grails 2.1.0。谁能帮我解决这个问题?!!!下面是我的代码:
我的 parent 域 >>>
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
}
}
我的 child 域 >>>
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)
您应该先从父项中删除引用,然后再删除子项
例如
def entryMeetingDetailsDelete = AdtEntryMeetingDetails.get(Long.parseLong(params[entryMeetingDetailsId + detailsCounter]))
adtEntryMeetingInstance.removeFromAdtEntryMeetingDetails(entryMeetingDetailsDelete)
entryMeetingDetailsDelete.delete()
我正在将数据保存到我的入门会议 table 以及入门会议详细信息 table,这是入门会议 child table table .但是当我只想删除 child table 记录时,它会出错。我不知道该怎么办。我正在使用 grails 2.1.0。谁能帮我解决这个问题?!!!下面是我的代码:
我的 parent 域 >>>
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
}
}
我的 child 域 >>>
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)
您应该先从父项中删除引用,然后再删除子项
例如
def entryMeetingDetailsDelete = AdtEntryMeetingDetails.get(Long.parseLong(params[entryMeetingDetailsId + detailsCounter]))
adtEntryMeetingInstance.removeFromAdtEntryMeetingDetails(entryMeetingDetailsDelete)
entryMeetingDetailsDelete.delete()