java - 自定义包装的枚举类型不支持 java.util.TreeSet 集合类型
问题描述
我正在尝试将枚举类型持久保存到数据库。在初始化 SessionFactory 对象时出现此错误:
初始 SessionFactory 创建 failed.org.hibernate.AnnotationException:属性不支持 java.util.TreeSet 集合类型:org.structure.business.Accountant.permissions
我的枚举类型包装器:
@Entity(name = "PERMISSION")
public class PermissionWrapper implements Serializable {
private static final long serialVersionUID = 9086935561465328054L;
@Id
@Enumerated(EnumType.STRING)
private Permission permission;
@Override
public boolean equals(Object obj) {
if (!(obj instanceof PermissionWrapper)) {
return false;
}
PermissionWrapper permission2 = (PermissionWrapper) obj;
return permission == permission2.getPermission();
}
...
}
使用包装器的实体:
@Entity(name = "ACCOUNTANT")
public class Accountant extends NormalUser {
private String companyName;
@OneToMany
private TreeSet<PermissionWrapper> permissions;
...
}
用于存储唯一包装枚举的处理程序:
public class Permissions {
private static TreeSet<PermissionWrapper> permissions;
static {
System.out.println("Initialization of permissions...");
setPermissions(initPermissionsTreeSet());
}
private static TreeSet<PermissionWrapper> initPermissionsTreeSet() {
TreeSet<PermissionWrapper> permissions = new TreeSet<>();
permissions.add(new PermissionWrapper(Permission.READ));
permissions.add(new PermissionWrapper(Permission.EDIT));
permissions.add(new PermissionWrapper(Permission.CREATE));
permissions.add(new PermissionWrapper(Permission.DELETE));
return permissions;
}
...
}
解决方案
利用
@OneToMany
private Set<PermissionWrapper> permissions;
实际上hibernate使用自己的collection实现。
推荐阅读
- r - 如何根据 R 中的时间分隔列?
- ruby-on-rails - 如何阻止活动记录回调在失败时抛出错误?
- excel - 使用 VBA/Macros 自动生成电子表格报告的建议
- excel - 基于列对 csv 进行切片并使用 powershell 脚本将电子邮件发送到相应的邮件地址的脚本
- laravel - 空输入:在 null 上调用成员函数 hashName()
- pyomo - 使用 Neos 访问 Pyomo 用户时间
- javascript - Android webview 自动搜索
- javascript - Vue + Flask:简单的杂货清单示例不起作用
- c# - 你怎么知道在 Windows server 2008R2 上用于 TLS 1.2 的密码版本
- reactjs - WebSocket 连接到 'wss://localhost:3000/sockjs-node' 失败: