JPA列挙タイプフィールドの挿入
JPAはエニュメレート・タイプフィールドを挿入します.(1)エニュメレート・ワードの値を挿入します.(2)エニュメレート・シーケンス番号を挿入します.(3)エニュメレート・ユーザー定義の値を挿入します.
例えば、列挙類があります.
1.列挙名の値を挿入する文字列
BOYまたはGIRLを表に入れます.エンティティフィールドは以下の通りです.
ordinalとは、クラスで列挙の順番を定義し、0から始まるという意味です.このような方式はあまり使われていません.クラスメートが列挙類を修正したので、業務の異常を引き起こしやすいです.
また、JPAのデフォルト方式(@Emmerated注を付けない)はこのようです.
例えば、BOYを表に入れます.このような方式は0に預け入れます.このような方法では、GIRLを表に保存します.
たとえば:
コードを例にとって、コメントをよく見てください.もしBOYの1を表に入れたいなら、
例えば、列挙類があります.
public enum Gender {
BOY("1" , "boy" , "Boy");
GIRL("2" , "girl" , "Girl");
private int value;
private String s1;
private String s2;
//....
}
1.列挙名の値を挿入する文字列
BOYまたはGIRLを表に入れます.エンティティフィールドは以下の通りです.
public class Staff {
@Enumerated(EnumType.STRING)
private Gender gender;
//...
}
2.列挙の番号を挿入する、すなわちordinalです.ordinalとは、クラスで列挙の順番を定義し、0から始まるという意味です.このような方式はあまり使われていません.クラスメートが列挙類を修正したので、業務の異常を引き起こしやすいです.
また、JPAのデフォルト方式(@Emmerated注を付けない)はこのようです.
例えば、BOYを表に入れます.このような方式は0に預け入れます.このような方法では、GIRLを表に保存します.
public class Staff {
@Enumerated(EnumType.ORDINAL)
private Gender gender;
//...
}
3.列挙のユーザー定義値を挿入するたとえば:
public enum Gender {
BOY("1" , "boy" , "Boy");
Girl("2" , "girl" , "Girl");
private int value;
private String s1;
private String s2;
//....
}
BOYの数字1または「boy」または「Boy」を表に入れたい場合、JPAはデフォルトではサポートされていません.特定のインターフェースを実現するためにクラスをカスタマイズする必要があります.コードを例にとって、コメントをよく見てください.もしBOYの1を表に入れたいなら、
public class GenderConverter implements AttributeConverter{
/**
* convertToDatabaseColumn
* Gender value
*/
@Override
public Integer convertToDatabaseColumn(Gender attribute) {
if(attribute == null){
throw new RuntimeException("Unknown Gender text : " + attribute);
}
return attribute.getValue();
}
/**
* convertToEntityAttribute
* value gender
*/
@Override
public Gender convertToEntityAttribute(Integer dbData) {
for(Gender s : Gender.values()){
if(s.getValue() == (dbData)){
return s;
}
}
throw new RuntimeException("Unknown Gender text : " + dbData);
}
}
インスタンスクラス:public class Staff {
/**
* @Convert GenderConverter
* JPA Gender
*/
@Convert(converter = GenderConverter.class)
private Gender gender;
//...
}