如何讓我的模型類字段具有唯一性?例如。如果已經登錄,我想爲用戶顯示正確的消息。我必須寫我自己的驗證檢查並使用它,或者可以使用JPA @UniqueConstraint
?玩! - 獨特的模型字段
2
A
回答
5
我已經這樣做了:
@Entity
public class User extends Model {
@Basic(optional=false) @Column(unique=true) public String name;
public User(String name) {
this.name = name;
create();
}
/** used in registration to find name clash */
public static User findByName(String name) {
return find("name", name).first();
}
}
然後在控制器,你做這樣的事情:
public static void register(@Required String name) {
if(User.findByName(name)!=null) {
Validation.addError("name", "this name is not available");
}
if (validation.hasErrors()) {
validation.keep();
params.flash();
flash.error("Please correct the form data.");
signup(); // whatever your GET action was
}
User user = new User(name);
login(); // whatever your success action is
}
你可以做到這一點沒有User.findByName()檢查和你會得到一個ConstrainViolationException,但這當然不是非常用戶友好的。您也可以嘗試/捕獲該異常。我更喜歡這兩種方式,在數據庫中用戶友好且一致。
2
你必須寫自己的支票。請參閱http://bazaar.launchpad.net/~opensource21/+junk/permsec/files/head:/app/de/ppi/util/validation/ 我幾個月前寫過這篇文章,不幸的是我現在沒有時間玩。
0
我通過在我的crud控制器中重寫創建方法來實現此目的。在validaiton.hasErrors()方法之前調用一個自定義validateUniqueFields方法。然後,我可以爲我獨特的字段返回有效的錯誤。
public static void create() throws Exception
{
ObjectType type = ObjectType.get(getControllerClass());
notFoundIfNull(type);
Constructor<?> constructor = type.entityClass.getDeclaredConstructor();
constructor.setAccessible(true);
Model object = (Model) constructor.newInstance();
Binder.bindBean(params.getRootParamNode(), "object", object);
validation.valid(object);
validateUniqueFields(object);
if (validation.hasErrors()) {
renderArgs.put("error", play.i18n.Messages.get("crud.hasErrors"));
try {
render(request.controller.replace(".", "/") + "/blank.html", type, object);
} catch (TemplateNotFoundException e) {
render("CRUD/blank.html", type, object);
}
}
object._save();
flash.success(play.i18n.Messages.get("crud.created", type.modelName));
if (params.get("_save") != null) {
redirect(request.controller + ".list");
}
if (params.get("_saveAndAddAnother") != null) {
redirect(request.controller + ".blank");
}
redirect(request.controller + ".show", object._key());
}
private static void validateUniqueFields(Model object) {
String value = ((CastModelHere)object).identifier;
String ident = "identifier";
if(TUCharacterTypeIdentifier.find(ident, value).first() != null)
{
validation.addError("object." + ident, ident + " already taken");
}
}
相關問題
- 1. Rails 3.1+遷移中databse級別的獨特模型字段?
- 2. mysql獨特字段
- 3. 獨特和空的字段
- 4. INSERT INTO獨特的字段
- 5. Mongoid獨特模型引用
- 6. 更改表字段獨特
- 7. Django - 默認的Django User模型是否有任何獨特的字段?
- 8. django模型可以擁有獨特且共享的非唯一字段嗎?
- 9. Django每個用戶的獨特模型
- 10. 沒有創建獨特的模型? Backbone.js
- 11. ASP.NET身份模型的獨特屬性
- 12. MVC 4獨特的現場模型
- 13. RethinkDB - 多個獨特的字段?
- 14. C# - 2字段DataTable列 - 獨特的值
- 15. 如何獲得獨特的字段
- 16. PHP - 獨特的字段不被識別
- 17. 流星獨特的文檔字段?
- 18. Solr獨特的多值字段
- 19. 在yii用戶模塊中創建一個獨特的字段
- 20. 將模型字段插入Django中現有的模型字段
- 21. 帶子字段的Extjs模型字段
- 22. Django:模型字段內的子字段
- 23. 對於具有特定類型字段的模型,Tastypie脫水
- 24. 單獨的模型日期字段和驗證軌道
- 25. Django模型與Cloudinary字段
- 26. 需要的模型字段
- 27. Django模型:參考字段返回多種類型的模型
- 28. 在編輯其他模型字段時顯示模型字段
- 29. 玩!綁定UI值模型
- 30. 玩!和模型驗證
我也在想抓住異常,但我覺得這有點「不整齊」。我已經做了類似於你所提議的事情,但我仍然缺少模型中的唯一性,所以我會補充說一致。 – jjczopek 2011-05-30 23:11:26