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

时间:2015-05-17 10:16:34

标签: java hibernate jpa

我在JPA(hibernate)中有User角色。 如果我从用户集中删除角色,则它不会传播到数据库。 所以它仍然存在于数据库中。 (我也注意到这种情况有时只会发生)
如果我将角色集设置为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;

在托管实体的交易中

user.getRoles().remove(Role.ADMIN);
user.getRoles().remove(Role.SPECIALUSER);

我也尝试冲洗,但没有帮助。我很困惑......

1 个答案:

答案 0 :(得分:0)

尝试添加@OrderColumn

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