Grails 域类中的更新未存储到数据库中

Grails 域类中的更新未存储到数据库中,grails,h2,grails-domain-class,Grails,H2,Grails Domain Class,我在将修改过的域类存储到数据库中时遇到了一个小问题。我有一份工作有两个主题(开始和结束)。我想在这些子对象和我的主作业(myFlag)中设置一个标志为true,并将这些值保存到嵌入式h2数据库中。不知何故,只有主作业和第二个子作业(end)正确存储到数据库中,而不是名为start的子作业。以下是服务中编写的代码: def markJob(masterjob) { def startjob= masterjob.startjob startjob.myFlag =

我在将修改过的域类存储到数据库中时遇到了一个小问题。我有一份工作有两个主题(开始和结束)。我想在这些子对象和我的主作业(myFlag)中设置一个标志为true,并将这些值保存到嵌入式h2数据库中。不知何故,只有主作业和第二个子作业(end)正确存储到数据库中,而不是名为start的子作业。
以下是服务中编写的代码:

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”
。我还试图不保存作业,而是合并它们,这也不起作用

我通过控制器调用此方法:

@Transactional
def delete(Job jobInstance) {
    jobService.markJob(jobInstance)
}
在视图中调用控制器:

<g:link action="delete" id="${jobInstance.id}"> .... </g:link>

您是否考虑过向主作业添加级联保存? 我认为你想要的是以下关系:


此外,您还应该删除控制器的@Transactional并使用服务方法提供的事务(如果没有其他配置,这是默认的服务行为)。

您是否检查了它是否通过验证?我想是的-您使用“通过验证”的确切含义是什么?我还尝试在保存对象之前调用validate()。顺便说一句:startjob和endjob都是同一个域类的对象!谢谢,我已经得到了属于我的关系,但是cascade的东西做到了。答案中将添加解决方案。塔恩克斯!您甚至可以尝试在服务方法的末尾省略刷新。事务在离开服务方法后会自动提交,如果不需要刷新可能生成的任何值(即新对象的id),则应将会话处理留在休眠状态。
def markJob(masterjob) {
        masterjob.startjob.myFlag = true
        masterjob.endjob.myFlag = true
        masterjob.myFlag = true
        masterjob.save flush:true
}