2009-07-12 93 views
2

我有2個域..主控和細節。如何捕捉addToTag()錯誤[grails]

Master{ 
String masterName; 
static hasMany=[details:Detail] 
} 

Detail 
{ 
    String detailName ; 
    static belongsTo =[master:Master]; 
} 

我有處理保存

def save = { 
..... 
def master = new Master(params); 
params.detailsName.eachWithIndex(dtName, index -> 
    def detail = new Detail(); 
    detail.detailName = dtName; 
    .... 
    master.addToDetails(detail); 
} 
    ..... 
master.save(flush:true); 
} 

當我打電話master.save(形式),如果在細節上存在錯誤,主仍保存數據。我想知道如何取消主如果有細節錯誤,我想知道如何跟蹤細節的錯誤?

感謝

回答

3

事務是你所需要的。您可以在服務中執行保存。在與交易=真正的服務,所有的方法都被包含在交易中會有如有異常被拋出的自動回退:

class MasterService { 

    boolean transactional = true 

    def save(...) { } 
} 

或者你可以使用withTransaction封在控制器來包裝你的代碼在一個事務中如果你不想創建服務。

+0

我沒有使用事務,但我不知道如何知道有錯誤/細節無效插入(可能是名稱爲空或日期爲空等)。 據我所知,當細節無效時,標題仍然插入,導致細節無法保存。 一旦你addTo *()它將附加對象而不會引發任何錯誤。但是當你保存()細節不會保存,如果有錯誤,我不能得到錯誤消息。 – nightingale2k1 2009-07-13 01:47:16