2011/04/20

JPAでbooleanをマッピングする

環境: Hibernate 3.6.3, PostgreSQL 8.4.7

JPAでbooleanをDBのBOOLEAN型にマッピングできるのかを試したら、普通にできた。


@Entity
public User {
    @Id
    private int id;
    @Column
    private boolean valid;

    public boolean isValid() {
        return valid;
    }
 
    public void setValid(boolean valid) {
        this.valid = valid;
    }



できて当然といえば当然だけどね。ちょっとうれしい。

しかし、BOOLEAN型ではない型を使ってブール値を保存しているような既存システムのDBに対してJPAでマッピングするには、値を変換する処理を書く必要があるようだ。

変換処理はWikibooksのJava Persistence/Basic Attributesここで紹介されている。これは面倒でスマートではない。

そんな面倒な変換処理をAnnotationで生成してくれる、Boolean Magic Converterというのを作っている人がいた。あるプロジェクトの一部品だが、BooleanMagicProcessorFactory.jar だけ個別にダウンロードできるようになっている。
こんな感じで書ける。


@BooleanMagic(trueValue = "T", falseValue = "F",
columnName = "VALID", ifNull = ReturnType.FALSE)
private transient Boolean valid;


Hibernateではorg.hibernate.annotations.Typeで次の型がある。

@Type(type="yes_no") ... Y/N
@Type(type="true_false") ... T/F

1/0はないのか...と思った。一応 org.hibernate.usertype.UserType を実装すれば、1/0を@Typeで指定できるようになりそうだが、いずれにせよ他のアプリケーションサーバで動かすことになったときHibernate依存だと困るので避けたい。

0 件のコメント:

コメントを投稿