我与多对多用户<->角色关系。 用户实体如下所示:
@Entity
@Table(name = "user",
uniqueConstraints = {@UniqueConstraint(columnNames = {"username", "email"})})
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", unique = true, nullable = false)
private Long id;
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "user_roles",
joinColumns = @JoinColumn(name = "user_id", referencedColumnName = "id"),
inverseJoinColumns = @JoinColumn(name = "role_id", referencedColumnName = "id"))
private Set<Role> roles = new HashSet<>();
}
角色实体如下:
@Entity
@Table(name = "role")
public class Role {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id", updatable = true, nullable = false)
private Long id;
@Enumerated(EnumType.STRING)
@Column(length = 60, name = "roleName", updatable = true, nullable = false)
private RoleName roleName;
}
一切正常,除了一件事。当我插入两个具有相同角色的用户时,角色表将获得两个具有相同角色但ID不同的记录。
问题是,我可以消除这种现象吗?理想情况下,ROLES表不应包含重复的角色。
任何建议将不胜感激。 :)
答案 0 :(得分:0)
我在您的实体映射中找不到问题。问题应该出在您试图保存用户实体的业务逻辑中。
如果您将尚未保存的角色实体设置为 User ,则可能会出现您描述的问题。换句话说,您的角色还没有 id 字段。
您需要从持久性提供商那里获取角色,并将其设置为 User 。
如果您使用的是spring-data,则可能类似于:
User user = ....
Role role = rolesRepository.findByName(roleName);
user.setRole(role);
// The persist User