使用方法
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