sproutcat.github.io

Hibernate 中的枚举持久化

这里主要记录 Hibernate 的枚举类型字段持久化的三种方式。以下为基础代码:

/**
 * 基础枚举接口
 * @author tzg
 */
public interface IBaseCodeEnum<E extends Enum<E> & IBaseCodeEnum<E>> {

    int getCode();

}
/**
 * 性别枚举
 * @author tzg
 */
public enum GenderEnum implements IBaseCodeEnum<GenderEnum> {
    (1),(2);
    
    private final int code;

    GenderEnum(int code) {
        this.code = code;
    }

    @Override
    public int getCode() {
        return code;
    }
}
/**
 * 用户信息实体
 * @author tzg
 */
@Data
@Accessors(chain = true)
@Entity
public class UserEntity {
    
    @Id
    private Long id;
    
    private String name;
    
    private GenderEnum gender;
    
}

使用 @Enumerated 实现枚举持久化

使用 @Enumerated(EnumType.ORDINAL)EnumType.STRING 方式。使用方法如下:

使用 AttributeConverter 接口实现枚举的自定义持久化

Hibernate 提供了 javax.persistence.AttributeConverter 接口指定如何将实体属性转换为数据库列表示。

此方案适用与数量不多或者个别特殊的枚举。

使用方法如下:

使用 UserType 接口实现枚举的自定义持久化

Hibernate 提供用户自定义类型的接口 org.hibernate.usertype.UserType

此方案适用于具有相似行为的一组枚举。

使用方法如下:

参考文章:https://www.oschina.net/code/snippet_100569_13747

​ https://segmentfault.com/a/1190000013163938