关于自定义hibernate validation的方法网上一大把,就不多写了,给一个地址吧:[url=http://xiaoyou8519.blog.163.com/blog/static/14015728620110614059638/]http://xiaoyou8519.blog.163.com/blog/static/14015728620110614059638/[/url]
下面是我用到的一个自定义的验证:主要做的是验证一下卡号是不是唯一的
代码:
实现:
Hibernate validation 是基于Hibernate事件模型的校验;通过测试发现,在对实体进行添加,编辑,删除的时候都进行了验证(文档中说删除不验证);具体的参考下面的连接:
[url=http://docs.jboss.org/hibernate/validator/4.2/reference/zh-CN/html/validator-checkconstraints.html]
http://docs.jboss.org/hibernate/validator/4.2/reference/zh-CN/html/validator-checkconstraints.html[/url]
下面是我用到的一个自定义的验证:主要做的是验证一下卡号是不是唯一的
代码:
@ValidatorClass(SameValidator.class)
@Target( {java.lang.annotation.ElementType.METHOD,java.lang.annotation.ElementType.FIELD } )
@Retention(java.lang.annotation.RetentionPolicy.RUNTIME)
@Documented
public @interface Same {
String message() default "已经存在,请换其它的试试!";
}
实现:
public class SameValidator implements Validator<Same>, PropertyConstraint,
Serializable {
private static final long serialVersionUID = -7858011546519554903L;
@SuppressWarnings("unchecked")
public void apply(Property property) {
if (!(property.getPersistentClass() instanceof SingleTableSubclass)
&& !(property.getValue() instanceof Collection)) {
// single table should not be forced to null
if (!property.isComposite()) {
Iterator<Column> iter = (Iterator<Column>) property
.getColumnIterator();
while (iter.hasNext()) {
iter.next().setNullable(false);
}
}
}
}
public void initialize(Same arg0) {
}
@SuppressWarnings("unchecked")
public boolean isValid(Object obj) {
if (obj == null) {
return false;
}
if (obj instanceof String) {
//添加时的验证逻辑
......
//编辑时的验证逻辑
......
}
return false;
}
}
Hibernate validation 是基于Hibernate事件模型的校验;通过测试发现,在对实体进行添加,编辑,删除的时候都进行了验证(文档中说删除不验证);具体的参考下面的连接:
[url=http://docs.jboss.org/hibernate/validator/4.2/reference/zh-CN/html/validator-checkconstraints.html]
http://docs.jboss.org/hibernate/validator/4.2/reference/zh-CN/html/validator-checkconstraints.html[/url]