gpt4 book ai didi

Grails,在服务中更新对象时保存不保存

转载 作者:行者123 更新时间:2023-12-02 13:54:35 25 4
gpt4 key购买 nike

拥有一个从服务中操作的域,然后尝试保存它不起作用,即使我使用:save(flush:true, failOnError:true)validate()返回 true 和 hasErrors()返回假。

我从 Bootstrap 调用电话:

def timeKeeperService
def init = { servletContext ->
def TimeKeeper tk = TimeKeeper.findByName('MAIN')?:new TimeKeeper(name:'MAIN').save(flush:true, failOnError:true)
tk = timeKeeperService.initialize()
tk = timeKeeperService.workStart()

域名:
class TimeKeeper {

String name
Date dateCreated
Date dateUpdated
Date workStart
Date workEnd

def initialize() {
println("TimeKeeper initialize...")
workStart = null
workEnd = null
}


def workStart() {
if (workStart == null) {
println("TimeKeeper - workStart")
workEnd = null
workStart = new Date()
} else {

}
println("TimeKeeper - workStart: "+workStart)
}

def workEnd() {
if (workEnd == null) {
workStart = null
workEnd = new Date()
} else {

}

}

def beforeInsert() {
dateCreated = new Date()
dateUpdated = new Date()
println("TimeKeeper - beforeInsert workStart: "+workStart)
}

def beforeUpdate() {
println("TimeKeeper - beforeUpdate workStart: "+workStart)
dateUpdated = new Date()
}

static constraints = {
dateCreated nullable:true
workStart nullable:true
workEnd nullable:true
}
}

服务:
@Transactional
class TimeKeeperService {

def TimeKeeper getTimeKeeper() {
TimeKeeper.findByName('MAIN')
}

def TimeKeeper initialize() {
def TimeKeeper TK = getTimeKeeper()
TK.initialize()
// def s = TK.save(flush:true)
// println("TimeKeeperService - initialize - save: "+s )
return TK
}

def TimeKeeper workStart() {
def TimeKeeper TK = getTimeKeeper()
TK.workStart()
println("TimeKeeperService - validate workStart: "+TK.validate())
// TK.save(flush:true, failOnError: true)
println("TimeKeeperService - workStart: "+TK.workStart+" Errors: "+TK.hasErrors())
return TK
}

从 Bootstrap 创建对象时,它可以工作 - 创建并保存对象。
但是服务方法 initializeworkStart即使我进行以下操作也不会保存:
tk.save(flush:true, failOnError:true) 

在 Bootstrap 中。

但是如果我在 Bootstrap 中设置属性然后调用保存它就可以了。
    tk.workStart = new Date()
tk.save(flush:true, failOnError: true)

我已经为此奋斗了几个小时,但没有成功。所以如果我能得到一些帮助来解决这个问题,我会很高兴。

最佳答案

我在 Grails 3.3.0 中遇到了同样的问题。调用域内的方法不会使实例成为 dirty .对于一种解决方法,我尝试在 Controller 中设置值并从那里开始工作:(

如果您调试,您可能会看到,该值已更改,但实例未更新,因为 hibernate 未找到它为 dirty
我怀疑它是 Grails 3.3.0 中的一个错误

我有 gradle 属性-

grailsVersion=3.3.0
gormVersion=6.1.6.RELEASE
gradleWrapperVersion=3.5

关于Grails,在服务中更新对象时保存不保存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47388953/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com