hibernate 枚举值不保存在数据库中(PostgreSQL)

zfciruhq  于 2023-10-23  发布在  PostgreSQL
关注(0)|答案(1)|浏览(128)

问题是枚举值没有保存在数据库中,所以每当我注册新用户时,即使我有所有正确的配置,它也会返回角色大小为0的用户,所以根本原因是ERole的枚举值没有保存在数据库中,角色表是空的。
ERole枚举:

public enum ERole {
    ROLE_USER,
    ROLE_MODERATOR,
    ROLE_ADMIN
}

角色实体:

@EqualsAndHashCode
@NoArgsConstructor
@Getter
@Setter
@Entity
@Table(name = "roles")
public class Role implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    @Enumerated(EnumType.STRING)
    @Column(length = 20)
    private ERole role;
    @ManyToMany(mappedBy="roles")
    private List<User> users = new ArrayList<>();
    public Role(ERole role) {
        this.role = role;
    }
}

用户实体:

@Getter
@Setter
@NoArgsConstructor
@EqualsAndHashCode
@Entity
@Table(name = "users",
        uniqueConstraints = {
                @UniqueConstraint(columnNames = "name"),
        })
public class User implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    private String name;
    private String pass;

    @JsonIgnoreProperties("users")
    @ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    @JoinTable(name = "user_roles",
            joinColumns = { @JoinColumn(name = "user_id") },
            inverseJoinColumns = { @JoinColumn(name = "role_id") })
    private List<Role> roles = new ArrayList<>();
    public User(String name, String pass) {
        this.name = name;
        this.pass = pass;
    }
}

如下图所示,Role实体具有ERole类型为x1c 0d1x的role列
我已经看到其他类似的线程,建议使用@Enumerated(EnumType.STRING),我一直在使用摆在首位。

lymnna71

lymnna711#

我知道这已经有一段时间了,但最近在我的个人资料中看到了这个问题,没有关闭,并闪回了我是如何解决这个问题并继续前进的。
因此,正如@XtremeBaumer提到的varchar,我有一个想法,就是把表角色作为一个字典,它将保存静态数据或很少修改。因此,我只是将三个级别的角色作为VARCHAR值插入,而hibernate多对多Map完成了连接表user_roles的其余部分。

相关问题