拥有一个从服务操纵的域,然后尝试保存该域不起作用,即使我使用:save(flush:true, failOnError:true)并validate()返回 true 并hasErrors()返回 false。
我从引导程序进行调用:
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()
Run Code Online (Sandbox Code Playgroud)
域名:
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
}
}
Run Code Online (Sandbox Code Playgroud)
服务:
@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
}
Run Code Online (Sandbox Code Playgroud)
当从引导程序创建对象时,它会起作用 - 创建并保存对象。但即使我做了以下操作,服务方法initialize也workStart不会保存:
tk.save(flush:true, failOnError:true)
Run Code Online (Sandbox Code Playgroud)
在引导程序中。
但是如果我在引导程序中设置属性然后调用保存它就可以了。
tk.workStart = new Date()
tk.save(flush:true, failOnError: true)
Run Code Online (Sandbox Code Playgroud)
我为此奋斗了几个小时但没有成功。因此,如果我能得到一些帮助来解决这个问题,我会非常高兴。
我在 Grails 3.3.0 中遇到了同样的问题。调用域内的方法不会使实例成为dirty. 对于解决方法,我尝试在控制器中设置值,它从那里开始工作:(
如果您调试,您可能会看到,值已更改,但实例未更新,因为 hibernate 未找到它dirty
我怀疑这是 Grails 3.3.0 中的一个错误
我有 gradle 属性 -
grailsVersion=3.3.0
gormVersion=6.1.6.RELEASE
gradleWrapperVersion=3.5
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1970 次 |
| 最近记录: |