【发布时间】:2017-11-20 09:41:45
【问题描述】:
拥有一个从服务中操作的域,然后尝试保存它,即使我使用以下方法也不起作用: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()
领域:
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
}
当从引导程序创建对象时,它可以工作 - 对象被创建并保存。
但是服务方法initialize 和workStart 不保存,即使我做了:
tk.save(flush:true, failOnError:true)
在引导程序中。
但是如果我在 bootstrap 中设置属性然后调用 save 就可以了。
tk.workStart = new Date()
tk.save(flush:true, failOnError: true)
我已经为此苦苦挣扎了几个小时,但没有成功。所以如果我能得到一些帮助来解决这个问题,我会很高兴的。
【问题讨论】:
-
Grails 的版本?
-
版本为:3.3.0
-
你的服务是跨国注释的,如果有问题它会回滚 trsansaction(不会保存数据),尝试临时评论@Transactional
-
我对此进行了测试,但没有帮助。我调用了 validate() 但没有错,它返回了 true,所以肯定还有其他问题。这可能很简单,但我看不到。
标签: grails grails-orm