从Grails控制器保存对象失败

时间:2012-12-21 16:09:34

标签: 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上时,该对象实际上并未持久,尽管没有报告任何错误(也不是通过手动检查也不是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'
}

1 个答案:

答案 0 :(得分:0)

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

obj.validate()
obj.errors.each {

  if(obj.hasErrors)
  println it
}