2012-12-21 24 views
2

有一個控制器剛更新的對象:保存從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' 
} 
+2

您可以將對象保存到數據庫中而沒有任何問題。如果生產數據源配置正常,請檢入DataSource.groovy。在您的本地機器上,您可能正在使用開發配置,在正在使用的產品上部署的應用程序 –

回答

0

請檢查是否有任何驗證錯誤。

obj.validate() 
obj.errors.each { 

    if(obj.hasErrors) 
    println it 
} 
+0

正如我前面提到的那樣,在運行時可以捕獲到的保存沒有錯誤。 –