玩! - 独特的模型领域

jjc*_*pek 2 java validation playframework

如何使我的模型类字段独一无二?例如.如果已经登录,我想为用户显示正确的消息.我必须编写自己的验证检查并使用它,或者@UniqueConstraint可以使用JPA 吗?

And*_*eis 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();
    }

}
Run Code Online (Sandbox Code Playgroud)

然后在控制器中执行以下操作:

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
}
Run Code Online (Sandbox Code Playgroud)

你可以在没有User.findByName()检查的情况下做到这一点,你会得到一个ConstrainViolationException但当然不是非常用户友好.您也可以尝试/捕获该异常.我更喜欢两种方式,用户友好且在数据库中保持一致.