【问题标题】:How to add enum value in addScaler() method in Spring boot using postgresql?如何使用 postgresql 在 Spring Boot 的 addScaler() 方法中添加枚举值?
【发布时间】:2020-05-18 08:27:45
【问题描述】:

我有一个枚举。但是每当我发布它时,我的数据都会在数据库中保存为数字 0、1、2。我不知道这是怎么回事。这就是我在前面展示它的方式:

import org.hibernate.type.StringType;
import org.hibernate.type.EnumType;

        SQLQuery query = getCurrentSession().createSQLQuery(sql.toString());

        query.addScalar("id", IntegerType.INSTANCE);
        query.addScalar("school",EnumType ); // how to call enumtype here?

我的后期控制器:

className.setSchool(SchoolType.FULL); //this is how i'm sending the school value

我的枚举:

public enum SchoolType {

    REGULAR("REGULAR"),
    FULL("FULL");

    private String label;

    SchoolType(String label) {
        this.label = label;
    }

    public String getLabel() {
        return label;
    }

    public String getName() {
        return name();
    }

}

我这样称呼它:

    @Column(name="school")
    private SchoolType school;

但问题不在于 reg 或 full ,数据库正在获取 0 或 1 值。如何解决这个问题?我没有获取 values ,而是将枚举键作为值。

【问题讨论】:

    标签: java spring hibernate enums


    【解决方案1】:

    根据休眠documentation,您应该添加@Enumerated 注释:

    @Enumerated(EnumType.STRING)
    @Column(name="school")
    private SchoolType school;
    

    如果您想将枚举值存储为枚举值的名称,如 java.lang.Enum#name 所示

    默认情况下,休眠使用ORDINAL 枚举映射类型,这就是为什么您的枚举值存储为序数的原因。

    【讨论】:

    • 没用。如果我给这个,那么我应该在 addScaler("school", type) 中发送什么。
    • 如果我在 addScalar 中传递这样的枚举类型,我会收到错误 expression expected
    • 你用的是什么休眠版本?
    • 休眠版本为 5.3.7.Final
    猜你喜欢
    • 1970-01-01
    • 2021-06-23
    • 1970-01-01
    • 1970-01-01
    • 2021-06-19
    • 2019-05-29
    • 1970-01-01
    • 1970-01-01
    • 2020-01-24
    相关资源
    最近更新 更多