2013-03-12 34 views
2

我有具有使用defineing在遊戲框架唯一約束2

@Email 
@Required 
@Column(unique=true) 
public String email; 
由框架也是一種電子郵件管理屬性 我想要的電子郵件是唯一的,在目前即時通訊做它的ID的用戶模型

這工作正常,但它拋出了一個PersistenceException。 玩法框架是否具有驗證功能,以便在表單級別處理此操作。 我想避免嘗試catch塊我的user.save()

回答

0

我有同樣的IDENTICAL問題。我最終通過使用一種方法來檢查該電子郵件是否已經存在,然後,如果是,則向表單添加錯誤。 事情是這樣的:

Form<EntityClass> yourForm = Form.form(EntityClass.class).bindFromRequest(); 
if (EntityClass.mailAlreadylExist(yourForm.data.get("email"))){ 
List<ValidationError> validationErrorList = new ArrayList<>(); 
validationErrorList.add(new ValidationError("" , "email already used" ,new ArrayList<>())); 
yourForm.errors().put("", validationErrorList); 
} 
if (yourForm.hasErrors(){ 
return badRequest(yourView.render(yourForm)); 
} else { 
//Do your stuff here, no PersistenceException will be thrown due to duplicate email 
} 

爲我工作,希望它有助於

+0

是什麼'mailAlreadylExist()'函數是什麼樣子? – KJ50 2015-03-06 18:39:47

+0

從郵件= mail_i_want_to_check返回次數> 0的usertable中選擇次數(*)?真假; – user2858970 2015-03-07 19:44:21

1

唯一約束只涉及數據庫:如果他們在表單級定義,表單驗證(「表面檢查」)將需要查詢數據庫來驗證您的目的。

我相信這個例外是你能找到的最好的(或者更壞的)解決方案。

爲了避免很多try/catch塊,您可能只有一個入口點來執行這項工作。