即使 unique 为 false,Hibernate 也不允许不唯一的记录
Hibernate doesn't allow not unique records even when unique is false
我有一个包含用户及其密码的数据库。
当我启动我的应用程序时,我创建了一些具有角色的用户并将它们存储到数据库中。
我的用户实体:
@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,但是当我添加具有角色的 userA:管理员、用户,然后添加具有角色的 userB:用户,记录 userB - 用户覆盖记录 userA - 用户。有人可以指出我的错误吗?
我正在使用休眠 5 + spring 5
如果您为 userB 保存角色,因为您在 UserRole 和 CascadeType.ALL 中映射了 User,保存后它会覆盖数据库中角色 user
的用户名。您真的需要映射到 UserRole 中的 User 吗?如果不需要,我认为您应该将其从 UserRole 实体中删除并仅保留角色名称。例如,可以将角色映射到用户 like
@Enumerated(EnumType.STRING)
@CollectionTable(name = "user_roles", joinColumns = @JoinColumn(name = "username"))
@Column(name = "role")
@ElementCollection(fetch = FetchType.EAGER)
private Set<Role> roles;
根据定义,ID 是唯一的。这就是唯一标识一个实体的东西。
我有一个包含用户及其密码的数据库。 当我启动我的应用程序时,我创建了一些具有角色的用户并将它们存储到数据库中。 我的用户实体:
@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,但是当我添加具有角色的 userA:管理员、用户,然后添加具有角色的 userB:用户,记录 userB - 用户覆盖记录 userA - 用户。有人可以指出我的错误吗?
我正在使用休眠 5 + spring 5
如果您为 userB 保存角色,因为您在 UserRole 和 CascadeType.ALL 中映射了 User,保存后它会覆盖数据库中角色 user
的用户名。您真的需要映射到 UserRole 中的 User 吗?如果不需要,我认为您应该将其从 UserRole 实体中删除并仅保留角色名称。例如,可以将角色映射到用户 like
@Enumerated(EnumType.STRING)
@CollectionTable(name = "user_roles", joinColumns = @JoinColumn(name = "username"))
@Column(name = "role")
@ElementCollection(fetch = FetchType.EAGER)
private Set<Role> roles;
根据定义,ID 是唯一的。这就是唯一标识一个实体的东西。