【问题标题】:java.util.TreeSet collection type not supported for custom wrapped enum type自定义包装的枚举类型不支持 java.util.TreeSet 集合类型
【发布时间】:2019-05-02 07:26:39
【问题描述】:

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

初始 SessionFactory 创建失败.org.hibernate.AnnotationException:属性:org.structure.business.Accountant.permissions 不支持 java.util.TreeSet 集合类型

我的枚举类型包装器:

@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;
}
...
}

【问题讨论】:

    标签: java hibernate enums treeset


    【解决方案1】:

    使用

    @OneToMany
    private Set<PermissionWrapper> permissions;
    

    其实hibernate使用自己的collection实现。

    【讨论】:

      猜你喜欢
      • 2011-09-11
      • 1970-01-01
      • 2021-09-07
      • 2012-03-10
      • 1970-01-01
      • 1970-01-01
      • 2016-07-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多