Тип коллекции java.util.TreeSet не поддерживается для пользовательских типов enum - PullRequest
0 голосов
/ 02 мая 2019

Я пытаюсь сохранить тип enum в базе данных. при инициализации объекта SessionFactory я получил эту ошибку:

Начальное создание SessionFactory failed.org.hibernate.AnnotationException: тип коллекции java.util.TreeSet не поддерживается для свойства: org.structure.business.Accountant.permissions

Моя оболочка для типа enum:

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

1 Ответ

1 голос
/ 02 мая 2019

Используйте

@OneToMany
private Set<PermissionWrapper> permissions;

На самом деле hibernate использует собственную реализацию коллекции.

...