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 マシンにデプロイすると、オブジェクトは正しく永続化されます。両方のマシンが同じ DB に接続されています。

をサービスに移動するsaveか、カバーすることwithTransactionが回避策です。はい、DB を扱うにはサービスの方が適していることはわかっています。代わりに、このような一貫性のない問題のある動作の原因 (およびそれを 1 か所で修正する方法) を見つけるのは興味深いことです。または、コントローラーでそのようなことを行うことは設計上禁止されていますか?

Grails 2.1.1、トムキャット

からの抜粋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 に答える