如何用ebean映射枚举?

How to map enum with ebean?

我正在使用 play framework 2 和 ebean 我有这样的枚举,并将 Integer id 保存在数据库

public enum Permission {
local$company$company_panel(2_001, "local.company.company_panel", "вход в компанийскую админку ")
Integer id;
String name;
String description;

Permission(Integer id, String name, String description) {
    this.id = id;
    this.name = name;
    this.description = description;
}

@DbEnumValue(storage = DbEnumType.INTEGER)
public Integer getId() {
    return id;
}

public String getName() {
    return name;
}

public String getDescription() {
    return description;
}

public static Permission findById(Integer id) {
    for(Permission permission : Permission.values()) {
        if(permission.getId().equals(id)) {
            return permission;
        }
    }
    return null;
}

}

那我就有这个合集了

@DbArray
@Column(name = "permissions")
private List<Permission> permissions = new ArrayList<>();

当我尝试从数据库中获取枚举时,出现这样的错误: 原因:java.lang.IllegalArgumentException:没有枚举常量 models.permission.Permission.2001

如果这是您代码的 copy/paste,您在枚举定义中写的是“2_001”而不是“2001”。

更新:

看看你的枚举是如何构造的,如果你想使用 local$company$company_panel,看起来你有两种方法可以做到这一点:

Permission myPermission = Permission.local$company$company_panel

Permission myPermission = Permission.getById(2001)

如果您希望能够使用 Permission.2001 访问它,您需要将其命名为 2001 而不是 local$company$company_panel