玩! -唯一模型字段

问题描述

| 如何使我的模型类字段唯一?例如。如果已经登录,我想向用户显示正确的消息。我必须编写自己的验证检查并使用它,否则可以使用JPA
@UniqueConstraint
?     

解决方法

        我这样做是这样的:
@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,但是这当然不是非常用户友好。您也可以尝试/捕获该异常。我更喜欢这两种方式,因为它们易于使用并且在数据库中保持一致。     ,        您必须写自己的支票。参见http://bazaar.launchpad.net/~opensource21/+junk/permsec/files/head:/app/de/ppi/util/validation/ 我是几个月前写的,很遗憾,我目前没有时间玩。     ,        我是通过像这样在我的原始控制器中重写create方法来实现的。在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\",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\");
    }
}
    

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...