无法从JPA实体在MySql中生成枚举类型

6

我正在使用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中生成枚举类型列?

1
你可能想试一下这个 - http://stackoverflow.com/a/8710305/738746 - Bhesh Gurung
2个回答

9
请使用以下代码:
public enum Gender {
    MALE, FEMALE;
}

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

1
这不仅不能编译,而且混淆了“性别”和“角色”,因此无法回答问题,也没有解释任何内容。为什么会有人点赞这个? - Michel Jung
虽然这个示例的组合方式有些粗糙,但这是我能找到的唯一一个展示如何使用JPA将枚举映射到实际SQL ENUM类型的答案,而不仅仅是将枚举值存储在不安全的数字或字符串类型中。 - UncleBob
枚举类型是否与ANSI兼容?枚举是在标准SQL中定义的还是只适用于MySQL?如果是这种情况:这个解决方案不是将@Entity类(我假设是Person或类似的东西)与DB表(和DBMS)耦合在一起吗? - Alvaro Pedraza

-1

如果您想在数据库中使用字符串枚举值,则列类型必须基于数据库服务器为varchar。实际上,我不清楚我想生成mysql枚举类型列的含义。但是,如果您想要将输出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)
}

输出:男性


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