Hibernate Validatorで調べると、日本語ではなぜかこのサイトが一番上に出てきます。不思議ですが、せっかくなので自前のValidatorを作る方法を載せておきます。とても簡単です。
ちなみにHibernate Validatorを使ったバリデーションは、org.hibernate.validator.ClassValidatorなどを使って明示的に実行すれば、エンティティに限らずどんなJavaBeanでも使えます。対象のクラスのことをHibernateが知っている必要はありません。
まずアノテーションから
@Documented
@ValidatorClass(StringDateValidator.class)
@Target({METHOD, FIELD})
@Retention(RUNTIME)
public @interface StringDate {
String message() default "{errors.date}";
String pattern() default "yyyyMMdd";
}
実装クラスはこんな感じです。
public class StringDateValidator implements Validator
, Serializable {
private static final long serialVersionUID = -7262522203009002581L;
private String pattern;
public void initialize(StringDate parameters) {
pattern = parameters.pattern();
}
public boolean isValid(Object value) {
if ( value == null ) return true;
if (!(value instanceof String)) return false;
String str = (String) value;
if(str.length()==0) return true;
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
sdf.setLenient(false);
try {
sdf.parse(str);
} catch (ParseException e) {
return false;
}
return true;
}
}
こんな感じでアノテーションと実装のセットを作るだけで使えます。楽チンですね。