问题是枚举值没有保存在数据库中,所以每当我注册新用户时,即使我有所有正确的配置,它也会返回角色大小为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),我一直在使用摆在首位。
1条答案
按热度按时间lymnna711#
我知道这已经有一段时间了,但最近在我的个人资料中看到了这个问题,没有关闭,并闪回了我是如何解决这个问题并继续前进的。
因此,正如@XtremeBaumer提到的varchar,我有一个想法,就是把表角色作为一个字典,它将保存静态数据或很少修改。因此,我只是将三个级别的角色作为VARCHAR值插入,而hibernate多对多Map完成了连接表user_roles的其余部分。