对象在验证后未持续而没有错误



我正在从Grails 2.4.5(Hibernate 3)中迁移到Grails 3.1.15(Hibernate 4),并注意到我的某些控制器动作不再起作用。p>我有以下操作(简化)

def create() {
        def myDomainObject = myDomainservice.getDefault()
        if (myDomainObject.validate()) {
            myDomainObject.save()
            render 'OK'
        } else {
            render 'WRONG'
        }
}

此操作在Grails 2中正常工作。

在Grails 3中,这已经不再如此。操作调用没有错误执行,但对象未存储在DB中(但是分配了ID)。

进行了一些故障排除后,我得出一个结论,呼叫validate()以某种方式忽略save()(Validate()未检测到任何问题)。

添加@Transactional或明确冲洗save(flush:true)解决了问题。

我能够恢复旧行为吗?

我已经检查了hibernate.flush.mode = AUTO,并且在两个版本中都是相同的。

核心应用程序逻辑(作为域保存)至少由于consern的不干净分离而被控制器中的控制器不建议使用。

尝试将您的逻辑移至服务(默认情况下是交易的,即用@transactional注释),您一次涵盖了2个目标:

  1. 清洁器代码
  2. 工作功能

相关内容

  • 没有找到相关文章

最新更新