有一個控制器剛更新的對象:保存從Grails的控制器中的對象失敗
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的
Excerptions從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'
}
您可以將對象保存到數據庫中而沒有任何問題。如果生產數據源配置正常,請檢入DataSource.groovy。在您的本地機器上,您可能正在使用開發配置,在正在使用的產品上部署的應用程序 –