2

有一个控制器只是更新一个对象:

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'
}
4

1 回答 1

0

请检查是否没有验证错误。

obj.validate()
obj.errors.each {

  if(obj.hasErrors)
  println it
}
于 2012-12-24T23:01:16.957 回答