需求背景
对于一些数据库字段,虽然它只有几种有限的内容种类,但它的格式并不完全遵守SCREAMING_SNAKE_CASE,所以就需要进行一些设置来保证Spring Data JPA映射正确的值。
实现方式
枚举类Color:
public enum Color {
RED,
GREEN,
BLUE
}
默认的实现是映射枚举值的ORDINAL值
@Entity
public class Entity {
@Enumerated(EnumType.ORDINAL) // default mapping, same without annotation
private Color color;
// other properties and methods
}
需要映射枚举值的name的话,则
@Enumerated(EnumType.STRING)
以上两种是常用的方式,但有时候情况会更复杂,比如数据库中存储的是枚举值的小写name,这时候就需要用到AttributeConverter
,其实不光是枚举类,其他需要自定义存储的特殊类都可以统一编写这个转换器。
这里我们就以枚举类对AttributeConverter
进行实现
public abstract class EnumConverter<E extends Enum<E>> implements AttributeConverter<E, String> {
@Override
public String convertToDatabaseColumn(E attribute) {
return attribute != null ? attribute.name().toLowerCase(Locale.ROOT) : null;
}
@Override
public E convertToEntityAttribute(String dbData) {
return dbData != null ? Enum.valueOf(attributeType(), dbData.toUpperCase(Locale.ROOT)) : null;
}
protected Class<E> attributeType() {
throw new UnsupportedOperationException("attributeType() must be overridden in concrete subclass");
}
}
具体的枚举类只要实现attributeType()
方法就好了
更自定义就方式就是直接去实现AttributeConverter
,实现convertToDatabaseColumn()
和convertToEntityAttribute()
方法。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。