有一个控制器只是更新一个对象:
def obj = Table.find(...)
obj.state = "END"
if(!obj.save(flush:true)) ...
// Session flushing does not help too.
// I am able to fetch that object again here but it is never persisted to DB
当部署到Debian上时,该对象实际上并未持久,尽管没有报告任何错误(也不是通过手动检查也不是failOnError
)。但是如果部署到我的本地Windows机器上,该对象将被正确保留。两台机器都连接到同一个DB。
将save
移动到服务中或覆盖它withTransaction
是解决方法。是的,我知道服务是处理数据库的更好地方。相反,我很有兴趣找到这种不一致和有问题的行为的原因(以及如何在一个地方修复它)。或者设计师在控制器中做这些事情是禁止的?
Grails 2.1.1,Tomcat
来自DataSource.groovy
的摘录:
dataSource {
driverClassName = "oracle.jdbc.driver.OracleDriver"
dialect = org.hibernate.dialect.Oracle10gDialect
pooled = true
}
hibernate {
cache.use_second_level_cache = true
cache.use_query_cache = false
cache.region.factory_class = 'net.sf.ehcache.hibernate.EhCacheRegionFactory'
}
答案 0 :(得分:0)
请检查是否没有验证错误。
obj.validate()
obj.errors.each {
if(obj.hasErrors)
println it
}