Hibernate - 永続化前の正当性チェック

Advertisement

永続化前の正当性チェック

永続オブジェクトを永続化する(データが格納されているオブジェクトをデータベースに登録する)前に正当性チェックを行う場合、Validatableインタフェースを実装することにより、validate()メソッドによる正当性チェックが自動実行される。

正当性チェックの結果が不正になる場合はorg.hibernate.classic.ValidationFailureメソッドをthrowするように実装を行う。

サンプル

チェックを行う前の状態
Client.java
EmpDto empDto = new EmpDto();
empDto.setSalary("-1");

Transaction trans = session.beginTransaction();
session.save(empDto);
trans.commit();

System.out.println("新規レコードが追加されました。");

結果
Hibernate: insert into Emp (name, salary, bonus, ar, id) values (?, ?, ?, ?, ?)
新規レコードが追加されました。

チェック処理を実装
EmpDto.java
import org.hibernate.classic.Validatable;
import org.hibernate.classic.ValidationFailure;

public class EmpDto implements Validatable{
    // property, setter, getter
    // ...

    public void validate() throws ValidationFailure {
        if(Long.parseLong(this.getSalary()) < 0){
            throw new ValidationFailure("salary");
        }
        if(Long.parseLong(this.getBonus()) < 0){
            throw new ValidationFailure("bonus");
        }
    }
}

Client.java
EmpDto empDto = new EmpDto();
empDto.setSalary("-1");

Transaction trans = session.beginTransaction();
session.save(empDto);
trans.commit();

System.out.println("新規レコードが追加されました。");

結果
org.hibernate.classic.ValidationFailure: salary
    at dto.EmpDto.validate(EmpDto.java:100)
例外が発生した。

Advertisement

ショートカット

634トップページ
このカテゴリのトップページに戻る
634ラボ

サイト検索

Google

Web サイト内

Y!ログール