Springboot JPA 枚举Enum类型存入到数据库

您所在的位置:网站首页 codestring类型 Springboot JPA 枚举Enum类型存入到数据库

Springboot JPA 枚举Enum类型存入到数据库

2023-09-30 19:14| 来源: 网络整理| 查看: 265

1、使用JPA 的@Enumerated 注解 ,可以直接将Enum映射到数据库中。但是value的值只有两种方式选择,一种是使用枚举的序号映射,一种是枚举的名称来映射。

public enum EnumType { /** Persist enumerated type property or field as an integer. */ ORDINAL, /** Persist enumerated type property or field as a string. */ STRING }

如果想存入枚举中的自定义的值,则需要实现AttributeConverter接口

2、实现AttributeConverter接口方式,@Covert 注解使用

/** * @param : 保存到数据库的数据类型 * @author peter * date: 2019-05-15 16:57 **/ public interface PersistEnum2DB { DB getData(); } import javax.persistence.AttributeConverter; /** * @param 实体类中枚举的类型,需实现{@link PersistEnum2DB} 接口 * @param 保存到数据库的数据类型 * @author peter * date: 2019-05-15 16:59 */ public abstract class AbstractEnumConverter implements AttributeConverter { private final Class clazz; public AbstractEnumConverter(Class clazz) { this.clazz = clazz; } @Override public DB convertToDatabaseColumn(ATTR attribute) { return attribute != null ? attribute.getData() : null; } @Override public ATTR convertToEntityAttribute(DB dbData) { if (dbData == null) return null; ATTR[] enums = clazz.getEnumConstants(); for (ATTR e : enums) { if (e.getData().equals(dbData)) { return e; } } throw new UnsupportedOperationException("枚举转化异常。枚举【" + clazz.getSimpleName() + "】,数据库库中的值为:【" + dbData + "】"); } } 使用方式 import com.tourcoo.parking.enums.convert2db.AbstractEnumConverter; import com.tourcoo.parking.enums.convert2db.PersistEnum2DB; /** * @author peter * create: 2019-05-15 14:33 **/ public enum PayStatus implements PersistEnum2DB { NONPAY(0, "未支付"), PAID(1, "已支付"); private int code; private String msg; PayStatus(int code, String msg) { this.code = code; this.msg = msg; } public int getCode() { return code; } public String getMsg() { return msg; } @Override public Integer getData() { return code; } public static class Converter extends AbstractEnumConverter { public Converter() { super(PayStatus.class); } } } //支付状态 @Convert(converter = PayStatus.Converter.class) private PayStatus payStatus;


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3