Grails-试图移除对象,但它们又回来了
我有两个域类,Job和Description,它们是简单的一对多关系: Job.groovyGrails-试图移除对象,但它们又回来了,grails,gorm,Grails,Gorm,我有两个域类,Job和Description,它们是简单的一对多关系: Job.groovy class Job { static hasMany = [descriptions: Description] static mapping = { descriptions lazy: false } } Description.groovy class Description { static belongsTo = [job: Job] }
class Job {
static hasMany = [descriptions: Description]
static mapping = {
descriptions lazy: false
}
}
Description.groovy
class Description {
static belongsTo = [job: Job]
}
我有两个控制器操作:
def removeDescriptionFromJob(Long id) {
def jobInstance = Job.get(id)
System.out.println("before remove: " + jobInstance.descriptions.toString())
def description = jobInstance.descriptions.find { true }
jobInstance.removeFromDescriptions(description)
jobInstance.save(flush: true)
System.out.println("after remove: " + jobInstance.descriptions.toString())
redirect(action: "show", id: id)
}
def show(Long id) {
def jobInstance = Job.get(id)
System.out.println("in show: " + jobInstance.descriptions.toString())
}
这是我向removeDescriptionFromJob提交请求时打印的内容:
before remove: [myapp.Description : 1]
after remove: []
in show: [myapp.Description : 1]
为什么在removeDescriptionFromJob操作中删除了描述,但随后在show操作中立即返回?
removeFromDescriptions
确实从Description
中删除了jobInstance
的关系,但实体Description
仍然存在
System.out.println(“删除后:+jobInstance.descriptions.toString())
由于关系不存在,因此将导致无o/p。请尝试直接获取描述对象,如:
System.out.println("after remove: " + Description.get(//id you just disassociated))
您将成功获得描述
为了避免这种情况,您需要将下面的映射属性添加到Job
,以便在实体从父实体分离后删除所有孤立项
说明级联:“全部删除孤立项”
比如:
-必须读取。
removeFromDescriptions
确实从description
中删除了jobInstance
的关系,但实体description
仍然存在
System.out.println(“删除后:+jobInstance.descriptions.toString())
由于关系不存在,因此将导致无o/p。请尝试直接获取描述对象,如:
System.out.println("after remove: " + Description.get(//id you just disassociated))
您将成功获得描述
为了避免这种情况,您需要将下面的映射属性添加到Job
,以便在实体从父实体分离后删除所有孤立项
说明级联:“全部删除孤立项”
比如:
-必须阅读。您希望删除描述,还是仅仅解除与作业的关联?我希望删除它,尽管解除关联也可能有效。您希望删除描述,还是仅仅解除与作业的关联?我希望删除它,尽管解除关联也可能有效。