使用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的數(shù)字1或者 “boy” 或者“Boy”存入表中,JPA默認是不支持的,需要自定義一個類實現(xiàn)特定接口: implements AttributeConverter<X,Y>。
以代碼為例,詳看注釋,假如我想將BOY的1存入表中:
public class GenderConverter implements AttributeConverter<Gender, Integer>{
? ? /**
? ? ?* convertToDatabaseColumn方法是轉換數(shù)據(jù)到表中
? ? ?* 這里是將Gender 枚舉的value存入表中
? ? ?*/
?? ?@Override
?? ?public Integer convertToDatabaseColumn(Gender attribute) {
?? ??? ?if(attribute == null){
?? ??? ??? ?throw new RuntimeException("Unknown Gender text : " + attribute);
?? ??? ?}
?? ??? ?return attribute.getValue();
?? ?}
?
? ? /**
? ? ?* convertToEntityAttribute方法是轉換表中的值轉換回數(shù)據(jù)
? ? ?* 這里是將表中的枚舉的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會根據(jù)自定義轉換規(guī)則對Gender枚舉類進行存取
? ? */
? ? @Convert(converter = GenderConverter.class)
? ? private Gender gender;
? ? //...省略
}JPA枚舉類型處理
/**
?* 枚舉類型
?*
?*/
public enum Sex {
? ? MALE,
? ? FEMALE
}/**
* @Enumerated(EnumType.STRING) : 存放字符串數(shù)據(jù)
* @Enumerated(EnumType.ORDINAL) : 存放索引值
*/
@Enumerated(EnumType.STRING)
public Sex getSex() {
? ? return sex;
}以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
詳解Java編程中static關鍵字和final關鍵字的使用
這篇文章主要介紹了詳解Java編程中static關鍵字和final關鍵字的使用,是Java入門學習中的基礎知識,需要的朋友可以參考下2015-09-09
MyBatis中的循環(huán)插入insert foreach問題
這篇文章主要介紹了MyBatis中的循環(huán)插入insert foreach問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-11-11
java實現(xiàn)圖的鄰接表存儲結構的兩種方式及實例應用詳解
這篇文章主要介紹了java實現(xiàn)圖的鄰接表存儲結構的兩種方式及實例應用詳解,鄰接表構建圖是必須需要一個Graph對象,也就是圖對象!該對象包含屬性有:頂點數(shù)、邊數(shù)以及圖的頂點集合,需要的朋友可以參考下2019-06-06
JDK8新特性-java.util.function-Function接口使用
這篇文章主要介紹了JDK8新特性-java.util.function-Function接口使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-04-04
IDEA創(chuàng)建Servlet程序的兩種實現(xiàn)方法
Servlet是JavaWeb應用程序中不可或缺的組件之一,本文主要介紹了IDEA創(chuàng)建Servlet程序的兩種實現(xiàn)方法,具有一定的參考價值,感興趣的可以了解一下2023-10-10
Java中回調(diào)函數(shù)?(callback)?及其實際應用場景
在Java中回調(diào)函數(shù)(Callback)是一種常見的設計模式,用于實現(xiàn)異步操作或事件處理,這篇文章主要給大家介紹了關于Java中回調(diào)函數(shù)?(callback)?及其實際應用場景的相關資料,需要的朋友可以參考下2024-02-02

