如何用ebean映射枚举?

时间:2018-08-05 18:40:09

标签: playframework ebean

我正在使用播放框架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

1 个答案:

答案 0 :(得分:0)

如果这是代码的复制/粘贴,则在枚举定义中写为“ 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