我有一个有关用户及其密码的数据库。 当我启动我的应用程序时,我会创建一些具有角色的用户并将其存储到数据库中。 我的用户实体:
@Entity
@Table(name = "USERS")
public class User {
@Id
@Column(name = "USERNAME", nullable = false, unique = true)
private String username;
@Column(name = "PASSWORD", nullable = false)
private String password;
@Column(name = "ENABLED", nullable = false)
private boolean enabled = true;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "user", fetch = FetchType.EAGER)
private Set<UserRole> userRole = new HashSet<>();
...getters and setters
和userRole实体
@Entity
@Table(name = "user_roles")
public class UserRole {
@Id
@Column(name = "ROLE")
private String role;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "USERNAME")
private User user;
默认情况下,列角色是unique = false,但是当我添加具有角色admin的userA,然后添加具有角色user的userB时,记录userB-用户覆盖记录userA-用户。有人可以指出我的错误吗?
我正在使用休眠5 +春季5
答案 0 :(得分:0)
如果您在UserRole和CascadeType.ALL中为User映射时保存了userB的角色,则在保存后将覆盖数据库中角色user
的USERNAME。您是否真的需要在UserRole中映射到User?如果不需要,我认为您应该将其从UserRole实体中删除,并仅使用角色名称。例如,可以像这样在用户中映射角色
@Enumerated(EnumType.STRING)
@CollectionTable(name = "user_roles", joinColumns = @JoinColumn(name = "username"))
@Column(name = "role")
@ElementCollection(fetch = FetchType.EAGER)
private Set<Role> roles;
答案 1 :(得分:0)
根据定义,ID是唯一的。这就是唯一标识实体的内容。