Spring JpaRepository枚举不匹配

4

我的枚举类如下:

public enum Sex {

    MALE('M'), FEMALE('F'), UNKNOWN('U');

    char name;

    Sex(char name) {
        this.name = name;
    }

    public char getName() {
        return name;
    }
}

我的 H2 数据库架构模式如下:

性别 CHAR(1),

我的模型类如下:

@Column
@NotNull
@Enumerated(EnumType.STRING)
private Sex sex;

当我尝试通过JpaRepository填充我的模型时,我会得到以下异常:

java.lang.IllegalArgumentException: No enum constant com.awesome.enumeration.Sex.M

是什么导致我无法将数据库映射到枚举类型?


顺便说一句,这里更准确的术语是“性别”。 - Kawu
2个回答

6

您可以为您的枚举编写自定义转换器:

@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);
    }
}

-2

它试图查找一个名为M的枚举。你的枚举是MALE,FEMALE和UNKNOWN。你可以将你的枚举更改为M,F,U


2
理想情况下,我希望我的枚举为 MALE,FEMALE 等等,但在保存到数据库时映射为字符。我该如何实现? - john

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接