使用JPA插入枚舉類型字段
JPA插入枚舉類型字段
JPA插入枚舉類型字段,有三種方式:
- 插入枚舉字面值
- 插入枚舉序號
- 插入枚舉中自定義的值
例如,我們有個枚舉類:
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開始。這種方式并不常用,不清楚同學修改了枚舉類容易導致業(yè)務異常。
而且JPA默認的方式(不加@Enumerated注解)就是這種。
例如將BOY存入表中,這種方式將存入0。將GIRL存入表中,這種方式將存入1;
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默認是不支持的,需要自定義一個類實現特定接口: implements AttributeConverter<X,Y>。
以代碼為例,詳看注釋,假如我想將BOY的1存入表中:
public class GenderConverter implements AttributeConverter<Gender, Integer>{ ? ? /** ? ? ?* 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會根據自定義轉換規(guī)則對Gender枚舉類進行存取 ? ? */ ? ? @Convert(converter = GenderConverter.class) ? ? private Gender gender; ? ? //...省略 }
JPA枚舉類型處理
/** ?* 枚舉類型 ?* ?*/ public enum Sex { ? ? MALE, ? ? FEMALE }
/** * @Enumerated(EnumType.STRING) : 存放字符串數據 * @Enumerated(EnumType.ORDINAL) : 存放索引值 */ @Enumerated(EnumType.STRING) public Sex getSex() { ? ? return sex; }
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Java網絡通信中ServerSocket的設計優(yōu)化方案
今天小編就為大家分享一篇關于Java網絡通信中ServerSocket的設計優(yōu)化方案,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-04-04Java開發(fā)者就業(yè)需要掌握的9大專業(yè)技能
這篇文章主要為大家詳細介紹了java就業(yè)前需要掌握的專業(yè)技能,感興趣的小伙伴們可以參考一下2016-09-09JDK17、JDK19、JDK1.8輕松切換(無坑版,小白也可以看懂!)
在做不同的java項目時候,因項目需要很可能來回切換jdk版本,下面這篇文章主要介紹了JDK17、JDK19、JDK1.8輕松切換的相關資料,文中通過圖文介紹的非常詳細,需要的朋友可以參考下2023-02-02Mybatis 實現動態(tài)組裝查詢條件,仿SQL模式
這篇文章主要介紹了Mybatis 實現動態(tài)組裝查詢條件,仿SQL模式的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-06-06