【问题标题】:Unable to Generate enum type in MySql from JPA entity无法从 JPA 实体在 MySql 中生成枚举类型
【发布时间】:2013-06-24 05:40:31
【问题描述】:

我正在使用 JPA 2.1。我想生成 mysql 枚举类型列,如:gender enum('male','female')。我的枚举类是

public enum Gender {
  MALE,
  FEMALE
}

在JPA实体类中

@Enumerated
private Gender gender;//generate int type column

@Enumerated(EnumType.STRING)
private Gender gender; //generate varchar type column. 

MySql中有没有办法生成枚举类型列?

【问题讨论】:

标签: java jakarta-ee jpa java-ee-7


【解决方案1】:

使用以下代码:

public enum Gender {
    MALE, FEMALE;
}

@Enumerated(EnumType.STRING)
@Column(columnDefinition = "ENUM('User', 'Moderator', 'Admin')")
public Role role;
}

【讨论】:

  • 这不仅不编译,而且混淆了GenderRole,因此不回答问题,也不解释任何事情。为什么人们会赞成这个?
  • 虽然示例被疏忽地放在一起,但这是我能够找到的唯一答案,它显示了如何使用 JPA 将枚举映射到实际的 SQL ENUM 类型,而不是仅仅存储你的枚举值在不安全的数字或字符串类型中。
  • 枚举类型ANSI兼容吗?枚举是在标准 SQL 中定义的还是仅用于 MySQL?在那种情况下:这个解决方案不是将@Entity 类(我假设Person 或类似的东西)与数据库表(和DBMS)结合起来吗?
【解决方案2】:

如果您想在数据库中使用字符串枚举值,列类型必须是varchar,基于数据库服务器。其实我也不清楚I want to genrate mysql enum type column。但是,如果您想将输出MALE 显示到male,参考如下:

public enum Gender {
    FEMALE("female"), MALE("male");

    private String label;

    private Gender(String label) {
        this.label = label;
    }

    public String getLabel() {
        return label;
    }
}

测试类

public static void main(String args[]) {
    System.out.println(Gender.MALE)
}

输出:男性

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-09
    • 1970-01-01
    • 2022-08-22
    • 1970-01-01
    • 1970-01-01
    • 2019-07-14
    • 2017-02-02
    • 2013-01-04
    相关资源
    最近更新 更多