我的用户 - >角色关系表已经神奇地随机地从中删除了行。我们不能重现这个问题,但它发生在生产环境中。它只发生在prod中,并且只有当很多人使用该系统时才会发生这种情况,导致我们认为这是一个并发问题。下面是我定义的映射。
我们只有少数地方可以修改用户或角色。这些地方都不会导致问题发生!此外,没有其他系统可以对数据库起作用。
// User.java
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "user_roles", joinColumns = {
@JoinColumn(name = "user_id", referencedColumnName = "id") },
inverseJoinColumns = {@JoinColumn(name = "role_id") })
public Set<Role> getRoles() {
return this.roles;
}
// Role.java
@ManyToMany(fetch = FetchType.LAZY, mappedBy = "roles")
public Set<User> getUserRoles() {
return this.userRoles;
}
答案 0 :(得分:2)
根据您的说明,您应该删除Role
上的加入列标注,然后只需指定@ManyToMany(fetch = FetchType.LAZY, mappedBy = "roles")
。
通过这种方式,您不允许双方独立管理关系,这可能就是您遇到此问题的原因。
它与并发性无关,而是对谁拥有用户与角色之间关系的不正确映射。现在你的映射表明双方都拥有它,因此修改Role
可能会产生意想不到的后果。