【问题标题】:How to make an integer enum declaration in java [closed]如何在java中进行整数枚举声明[关闭]
【发布时间】:2020-03-13 10:38:31
【问题描述】:

我的问题如下:

我想创建一个带有 int 枚举的实体“等级”(我使用 spring boot 和 hibernate 来创建我的数据库表)。 你能帮帮我吗?

【问题讨论】:

标签: java mysql hibernate spring-boot spring-data-jpa


【解决方案1】:

enum 值必须是标识符,所以你不能这样做:

enum grade { 1, 2, 3, 4 }

你可以这样做:

enum Grade { G1, G2, G3, G4 }

但是,您可以将它们打印为 1、2、3 和 4:

enum Grade {
    G1(1), G2(2), G3(3), G4(4);

    private final int number;

    private Grade(int number) {
        this.number = number;
    }

    public int getNumber() {
        return this.number;
    }

    @Override
    public String toString() {
        return Integer.toString(this.number);
    }

    public static Grade of(int number) {
        return Stream.of(Grade.values())
                .filter(g -> g.getNumber() == number)
                .findFirst()
                .orElseThrow(() -> new IllegalArgumentException("Invalid grade number: " + number));
    }
}

更新

要使用 JPA 2.1+ 持久化这样的 enum,请按照文章 Persisting Enums in JPA | Baeldungsection 4 中所示进行操作。

@Converter(autoApply = true)
public class GradeConverter implements AttributeConverter<Grade, Integer> {

    @Override
    public Integer convertToDatabaseColumn(Grade grade) {
        if (grade == null)
            return null;
        return grade.getNumber();
    }

    @Override
    public Grade convertToEntityAttribute(Integer number) {
        if (number == null)
            return null;
        return Grade.of(number);
    }
}

【讨论】:

【解决方案2】:

你需要定义枚举类,然后组成一个等级的实体。 @Enumerated(EnumType.STRING) 将使用枚举元素的名称来存储对象,即 ONE、TWO 等。

public enum Grade {
    ONE, TWO, THREE, FOUR
}
@Enumerated(EnumType.STRING)
private Grade grade;

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-23
  • 2021-11-11
  • 1970-01-01
  • 1970-01-01
  • 2014-08-22
  • 1970-01-01
相关资源
最近更新 更多