从Grails控制器保存对象失败

从Grails控制器保存对象失败,grails,gorm,Grails,Gorm,有一个控制器正在更新对象: 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上时,该对象实际上不会持久化,尽管没有报告任何错误(也没有通过手动检查

有一个控制器正在更新对象:

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

保存
移动到服务中或用事务覆盖它是解决办法。是的,我知道服务是处理DB的更好的地方。相反,我很感兴趣的是发现这种不一致和有问题的行为的原因是什么(以及如何在一个地方修复它)。或者设计禁止在控制器中进行此类操作

Grails2.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'
}

请检查是否没有验证错误

obj.validate()
obj.errors.each {

  if(obj.hasErrors)
  println it
}

您可以毫无问题地将对象保存到数据库中。如果生产数据源配置正常,请检查DataSource.groovy。在您的本地计算机上,您可能正在使用开发配置,在已部署的应用程序上,您正在使用产品。正如我前面提到的,在运行时不会发现任何保存错误。