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;
}
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 件のコメント:
コメントを投稿