使用方法
Converterクラスの作成
Converterクラスは、javax.persistence.AttributeConverterインタフェースをを実装し、javax.persistence.Converterアノテーションを設定する。AttributeConverterの総称型には、Entityの属性の型とDBへ挿入する型を指定する。
このコードの例だと、Sex列挙型の値をStringに変換してDBに登録します。
import javax.persistence.AttributeConverter;
import javax.persistence.Converter;
import jpa.entity.Sex;
@Converter
public class SexConverter implements AttributeConverter<Sex, String> {
@Override
public String convertToDatabaseColumn(Sex attribute) {
return attribute.toString();
}
@Override
public Sex convertToEntityAttribute(String dbData) {
return Sex.valueOf(dbData);
}
}
Entityの実装
変換対象のカラムにjavax.persistence.Convertアノテーションを指定する。このアノテーションのconverter属性に、先ほど作成したConverterクラスを指定する。
@Entity
@Table(name = "user_info")
public class User {
private Long id;
private Sex sex;
@Id
@GeneratedValue
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@Column
@Convert(converter = SexConverter.class)
public Sex getSex() {
return sex;
}
public void setSex(Sex sex) {
this.sex = sex;
}
}
実行
以下のコードで、Sex列挙型の項目がDBに文字列で保存されることを確認します。final User user = new User(); user.setSex(Sex.MALE); em.persist(user);DBの値は下の結果のように列挙型の文字列表記になっています。
ID SEX ---------- -------------------- 1 MALE