Java 从列表中删除后,数据库中未更新JPA枚举集

Java 从列表中删除后,数据库中未更新JPA枚举集,java,hibernate,jpa,Java,Hibernate,Jpa,我有一个在JPA(hibernate)中扮演角色的用户。 若我从用户上的集合中删除角色,它不会传播到数据库。 所以它仍然保存在数据库中。 (我也注意到这种情况只是偶尔发生) 如果我将角色集设置为null persist,则只将正确的角色设置为用户集,并再次将其持久化,而不是其工作 public enum Role { USER("USER"), SPECIALUSER("SPECIALUSER"), ADMIN("ADMIN");

我有一个在JPA(hibernate)中扮演角色的用户。 若我从用户上的集合中删除角色,它不会传播到数据库。 所以它仍然保存在数据库中。 (我也注意到这种情况只是偶尔发生)
如果我将角色集设置为null persist,则只将正确的角色设置为用户集,并再次将其持久化,而不是其工作

public enum Role {
        USER("USER"),
        SPECIALUSER("SPECIALUSER"),
        ADMIN("ADMIN");

        private final String name;

        private Role(final String name) {
            this.name = name;
        }

        @Override
        public String toString() {
            return name;
        }    
用户实体中的声明

@ElementCollection(targetClass = Role.class, fetch = FetchType.EAGER)
    @Enumerated(EnumType.STRING)
    @CollectionTable(name = "USER_ROLES")
    @Column(name = "ROLE")
    private Set<Role> roles;
我也试着冲水,但没用。我很困惑…

也尝试添加一个:

@ElementCollection(targetClass=Role.class,fetch=FetchType.EAGER)
@枚举(EnumType.STRING)
@CollectionTable(name=“用户角色”)
@列(name=“ROLE”)
@OrderColumn(name=“index\u id”)
私人设定角色;

这个答案可以帮助你:@eyp会试试的,但我想我以前也试过一次。
user.getRoles().remove(Role.ADMIN);
user.getRoles().remove(Role.SPECIALUSER);
@ElementCollection(targetClass = Role.class, fetch = FetchType.EAGER)
@Enumerated(EnumType.STRING)
@CollectionTable(name = "USER_ROLES")
@Column(name = "ROLE")
@OrderColumn(name = "index_id")
private Set<Role> roles;