有一个控制器只是更新一个对象:
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 机器上,则该对象会正确持久化。两台机器都连接到同一个数据库。
将其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'
}