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

时间:2014-07-17 12:40:27

标签: grails h2 grails-domain-class

我在将修改后的域类存储到数据库中时遇到了一些问题。我有一份工作,有两个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
}

1 个答案:

答案 0 :(得分:1)

您是否考虑过向主作业添加级联保存? 我想你想要的是belongsTo-relationship:

http://grails.org/doc/latest/ref/Domain%20Classes/belongsTo.html

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