2013-08-04 55 views
0

我試圖用flush:true更新數據庫save()的操作。調試器顯示狀態已更新,但是當我使用此sql時,我仍處於舊狀態。「保存」不起作用,嘗試刷新並failOnError:true,但沒有給出錯誤

我現在用的是石英插件運行的預定cron作業是從同一個表上寫着:

DomainName.withTransaction{ status -> 
    try 
    {       
     DomainName name = DomainName.get(123) 
     name.status = "newstatus" 
     name.save(flush:true,failOnError:true) 
    } 
    catch(Exception rte) 
    { 
     log.error "Update failed with error ${rte.message}" 
     status.setRollbackOnly() 
    } 
} 

有沒有人遇到過類似的問題?在打開休眠登錄時沒有錯誤config.groovy

debug 'org.hibernate.SQL' 
    'org.hibernate.transaction' 
+1

你在哪裏有保存邏輯? – Alidad

+2

您是否嘗試刪除flush:true?當你使用withTransaction時,會話將在事務結束時被刷新,所以你不需要使用flush:true。 – meurer

+0

我建議你把一些日誌記錄,以確保name.save(flush:true,failOnError:true)被調用。 –

回答

0

我認爲問題出現在您給定的代碼塊之前。

在此事務處於活動狀態之前,您是否使用髒檢查(例如Domain.get())來拉對象?我的建議是仔細檢查您的代碼,並與所有髒檢查分離(例如,使用Domain.discard())並重試。這應該可以解決你的問題。

1

我遇到過這個問題。原來,要更新的實例是通過動態查找器獲取的。一旦我使用get(id)獲取實例,這些值將保存到數據庫表中。

在排除故障的過程中,我打開了SQL日誌記錄。當應該更新行時,當通過查找器獲取實例時,沒有更新語句寫入控制檯。使用get(id)將更新語句寫入控制檯。

0

我正面臨類似的問題。我通過動態方法獲取對象。然後將一個屬性傳遞給另一個方法。在另一種方法中,我再次通過動態查找器獲取對象。

我保存了域對象,但沒有保存。我試過failOnError以及flush,但沒有奏效。

我通過域對象,而不是使用動態查找程序,它的工作。

相關問題