gpt4 book ai didi

自定义包装枚举类型不支持 java.util.TreeSet 集合类型

转载 作者:行者123 更新时间:2023-11-30 05:39:32 26 4
gpt4 key购买 nike

我正在尝试将枚举类型保留到数据库。在初始化 SessionFactory 对象时出现此错误:

Initial SessionFactory creation failed.org.hibernate.AnnotationException: java.util.TreeSet collection type not supported for property: 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使用它自己的集合实现。

关于自定义包装枚举类型不支持 java.util.TreeSet 集合类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55947547/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com