我的枚举类如下:
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
是什么使我无法将数据库映射到枚举?
答案 0 :(得分:3)
您可以为您的枚举编写一个自定义转换器:
@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);
}
}
答案 1 :(得分:-1)
它将尝试查找名称为M的枚举。您的枚举是MALE,FEMAL和UNKNOWN。您可以将枚举更改为UILabel