鉴于游戏框架2.3计算机数据库示例应用程序 ,我想练一个属性添加的唯一约束。 比方说,我想要的name
的属性Computer
类是唯一的。 我试图通过添加这样做validate()
函数(吸气)到Computer.java
:
public List<ValidationError> validate() {
List<ValidationError> errors = new ArrayList<ValidationError>();
if(Computer.find.where().eq("name", getName()).findRowCount() != 0){
errors.add(new ValidationError("name", "Name must be unique. That value is already taken."));
}
return errors;
}
public String getName() {
return name;
}
在数据库中创建新记录时,该检查工作,然而,这现在导致验证错误,当你更新计算机对象,但不更改名称。 有没有办法添加唯一性约束,类似于到Rails ? 我如何可以验证独特的游戏?
谢谢!
更新 :看到答案由达维德 。
我结束了使用@Column(unique = true)
从位于javax.persistence API约束。 这不会产生播放形式的错误; 相反,它抛出一个PersistenceException
。 因此,我不得不加改变我的控制器来实现我想要的行为。 无论是create()
和update()
动作需要一个try / catch这样的:
try {
computerForm.get().save();
} catch (PersistenceException pe) {
flash("error", "Please correct errors below.");
formData.reject("name", "Name conflict. Please choose a different name.");
return badRequest(createForm.render(computerForm));
}
更新2:下面的每个答案是一个可能的解决方案