JPA註解@Enumerated映射枚舉字段

在javax.persistence包中有這麼兩個註解@Enumerated,@EnumTypejava

*/
@Target({METHOD, FIELD})
@Retention(RUNTIME)
public @interface Enumerated {

    /** (Optional) The type used in mapping an enum type. */
    EnumType value() default ORDINAL;
}
public enum EnumType {
    /** 持久枚舉類型字段爲整數,元素通常從0開始索引. */
    ORDINAL,

    /** 持久枚舉類型爲字符串. */
    STRING
}複製代碼

當我須要持久化一個枚舉類字段的時候,就能夠用@Enumerated來標註枚舉類型。來舉個栗子:數據庫

數據庫中有一張employee表app

對應的Employee實體post

@Entity
@Table(name = "employee", schema = "public")
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class Employee {

    @Id
    @GeneratedValue
    @Column(name = "id")
    private Long id;

    @Column(name = "name")
    private String name;

    @Column(name = "sex")
    @Enumerated(EnumType.ORDINAL)//性別字段持久化爲0,1
    private Sex sex;

    @Column(name = "type")
    @Enumerated(EnumType.STRING)//枚舉字符串
    private Type type;
}複製代碼

Sex枚舉類:測試

public enum Sex {

    MAIL("男"),
    FMAIL("女");

    private String value;

    private Sex(String value) {
        this.value = value;
    }
}複製代碼

Type枚舉類:ui

public enum Type {

    PROGRAMMER("開發"),
    PM("項目經理"),
    TESTERS("測試"),
    UI("妹子"),
    ;

    private String type;

    private Type(String type) {
    }
}複製代碼

那如今咱們來看一下插入幾條數據看下是什麼效果。this

EmployeeRepostory employeeRepostory = context.getBean(EmployeeRepostory.class);

Employee fireYao = Employee.builder().name("fireYao").sex(Sex.MAIL).type(Type.PROGRAMMER).build();

Employee gakki = Employee.builder().name("gakki").sex(Sex.FMAIL).type(Type.UI).build();

Employee whoever = Employee.builder().name("whoever").sex(Sex.FMAIL).type(Type.PM).build();

employeeRepostory.save(Arrays.asList(fireYao,gakki,whoever));複製代碼

插入數據後,數據庫中:spa

能夠看到,sex字段被持久化爲0,1這樣的int字段,由於在sex字段上標註了@Enumerated(EnumType.ORDINAL),那這樣持久化到數據庫時,就會根據枚舉類中的字段,依次從0開始標記,Sex中MAIL("男")就爲0,FMAIL("女")就爲1依次增長。code

在type字段上標註了@Enumerated(EnumType.STRING),就直接根據枚舉類的字段字符串來自動持久化到數據庫。cdn

若是枚舉字段上不加註解,那麼枚舉字段就會被默認映射爲 int 類型存儲。

那如今咱們來看查詢一下的結果。

List<Employee> all = employeeRepostory.findAll();複製代碼

能夠看到,查詢出來的結果中sex字段又自動還原成了Sex枚舉字段。


原文連接:JPA註解@Enumerated映射枚舉字段 | 火堯

相關文章
相關標籤/搜索