java - Spring JpaRepository ENUM 不匹配
问题描述
我的枚举类如下:
public enum Sex {
MALE('M'), FEMALE('F'), UNKNOWN('U');
char name;
Sex(char name) {
this.name = name;
}
public char getName() {
return name;
}
}
我的属性的 H2 数据库架构如下:
sex CHAR(1),
我的模型类是:
@Column
@NotNull
@Enumerated(EnumType.STRING)
private Sex sex;
当我尝试通过以下方式填充我的模型时,JpaRepository
出现异常:
java.lang.IllegalArgumentException: No enum constant com.awesome.enumeration.Sex.M
是什么阻止我将我的数据库映射到枚举?
解决方案
您可以为您的 enum 编写一个自定义转换器:
@Converter
public class SexConverter implements AttributeConverter<Sex, Character> {
@Override
public Character convertToDatabaseColumn(Sex sex) {
return sex.getName();
}
@Override
public Sex convertToEntityAttribute(Character dbData) {
return Sex.getByName(dbData);
}
}
然后在您的实体中:
@Entity
public class TestEntity {
@Column
@NotNull
@Convert(converter = SexConverter.class)
private Sex sex;
}
我还在您的枚举上创建了辅助静态方法,以通过字符名称获取枚举:
public enum Sex {
MALE('M'), FEMALE('F'), UNKNOWN('U');
char name;
Sex(char name) {
this.name = name;
}
public char getName() {
return name;
}
public static Sex getByName(char name) {
return Arrays.stream(Sex.values())
.filter(sex -> sex.getName() == name)
.findFirst()
.orElse(UNKNOWN);
}
}
推荐阅读
- python - 输出类型的对象不是 JSON 可序列化的
- python - 如何在不使用 Python 中的 Tkinter 的情况下将文本框字符串或单选按钮选择写入变量?
- javascript - 从 MongoClient.connect() 导出未在其他模块中读取
- html - 我可以避免在 HTML 数字输入中输入双负号吗
- python - 根据 Python 中的条件更改现有列中的值
- chef-infra - 刀节点列表 VS 刀 exec -E 'nodes.all.each {|n| 放“#{n.name}”}'
- python - 带有线程池的 Python GIL
- php - 如何使用 preg_match 从字符串中提取版本号和日期?
- variables - GRAFANA v8 - 如何在警报摘要中传递变量?
- python - SQLAlchemy-Utils 聚合 CompositeType