2011-07-21 33 views
0

我要訂閱添加到用戶類,我通過調用「AddTo就」的方法做到這一點,這裏是我的代碼:Grails框架方法AddTo就拋出多個異常調用

if (params.jobs == "on") { 
     user.addToSubscriptions(Category.findWhere(id: 1L)) 
    } else { 
     user.removeFromSubscriptions(Category.findWhere(id: 1L)) 
    } 

的「PARAMS」來了從複選框中,用戶可以通過設置複選框來訂閱某個類別。上面的代碼在提交表單時被調用。當用戶改變超過1類,如上認爲相同的代碼不同params.x,這樣

if (params.offers == "on") { 
     Category cat = Category.get(2) 
     if (!user.subscriptions.contains(cat)) 
     user.addToSubscriptions(Category.findWhere(id: 2L))//needs long variable 
    } else { 
     user.removeFromSubscriptions(Category.findWhere(id: 2L)) 
    } 

什麼也恰好只有類別至極什麼不工作是首先在代碼獲取添加和刪​​除,所有其他拋出以下異常:

org.hibernate.exception.GenericJDBCException: Could not execute JDBC batch update 

編輯: 在至極行拋出異常是這個壽,至極沒有意義的,我:(

編輯: 的異常被拋出w如果我想添加一個類別,它已經​​添加,它也不會被刪除。 (這隻適用於代碼中未先處理的類別,請不要問我爲什麼)

 //reload page 
    redirect(action: "userSettings") 

我該怎麼辦?請幫忙! 提前感謝! Daniel

回答

2

您可能試圖刪除與用戶無關的類別嗎? 如你所知...用戶沒有id = 2的分類,他發送了params.offers ==「off」?

也許你應該這樣做:

if (params.jobs == "on") { 
    user.addToSubscriptions(Category.findWhere(id: 1L)) 
} else { 
    Category cat = Category.get(2L) 
    if (user.subscriptions.contains(cat)) { 
     user.removeFromSubscriptions(cat) 
    } 
} 

一些提示: 如果你有ID,不要使用:

Category.findWhere(id:1L) 

但:

Category.get(1L) 

錯誤被扔在你粘貼的行上,因爲它可能是你的控制器的最後一行,因此在這之後在發生錯誤的地方,您會犯下事實。

嘗試將此代碼添加到您的控制器:

user.save() 
user.errors?.allErrors?.each { println it } 

這將打印時節省其發生的所有錯誤。

+0

嗯謝謝你,但它沒有幫助。問題是隻有當我想添加它和它已經添加的時候纔會拋出異常。但是如果(!user.subscriptions.contains(cat))檢查你的方法,它仍然會被拋出。對於除了在代碼中首先處理的所有類別,不可能刪除類別,我在控制檯中打印user.subscriptions。這無濟於事。 – dan

+0

我給你upvote,因爲如果(user.subscriptions.contains(cat)我可以修復另一個問題,我沒有提到這裏:)可悲的訂閱事情仍然不起作用 – dan

+0

你試過打印錯誤嗎?你能把它們粘貼在這裏嗎?我可以看到你已經在你的問題中編輯了代碼示例,但是你忘記了編輯else子句。這似乎相當重要。 – Krystian