我在将修改后的域类存储到数据库中时遇到了一些问题。我有一份工作,有两个subjobs(开始和结束)。我想在这些subjobs和我的masterjob(myFlag)中设置一个标志为true并将这些值保存到嵌入式h2数据库中。不知何故,只有masterjob和第二个subjob(end)正确存储到数据库中,而不是名为start的subjob。
这是服务中编写的代码:
def markJob(masterjob) {
def startjob= masterjob.startjob
startjob.myFlag = true
startjob.save flush:true
def endjob = masterjob.endjob
endjob.myFlag = true
endjob.save flush:true
masterjob.myFlag = true
masterjob.save flush:true
println masterjob.myFlag + ' ' + startjob.myFlag + ' ' + endjob.myFlag
}
所有这些域都有一个名为myFlag的布尔变量,默认情况下设置为false。如果我之后检查数据库,endjob和masterjob都将标志设置为true,但不是startjob。控制台日志将为'true true true'
。我也试图不保存这些工作,而是合并它们,但这也没有用。
我通过控制器调用此方法:
@Transactional
def delete(Job jobInstance) {
jobService.markJob(jobInstance)
}
在视图中调用控制器:
<g:link action="delete" id="${jobInstance.id}"> .... </g:link>
有人在考虑这个问题吗?
预先感谢每一位帮助!
解决
kiview的回答做到了。我改变了这样的服务方法:
def markJob(masterjob) {
masterjob.startjob.myFlag = true
masterjob.endjob.myFlag = true
masterjob.myFlag = true
masterjob.save flush:true
}
答案 0 :(得分:1)
您是否考虑过向主作业添加级联保存? 我想你想要的是belongsTo-relationship:
http://grails.org/doc/latest/ref/Domain%20Classes/belongsTo.html
此外,您应该删除控制器的@Transactional并使用服务方法提供的事务(如果没有配置,则它是默认的服务行为)。