0

你好呀,

我有一个具有多对多关系的用户和角色模型,如下所示

@Entity
@Table(name = "USER")
@Indexed
@XmlRootElement
public class User extends BaseObject implements Serializable, UserDetails,     PersistentObject, HasRevision, org.activiti.engine.identity.User {

private Set<Role> roles = new HashSet<Role>();
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(
        name = "USER_ROLE",
        joinColumns = { @JoinColumn(name = "USER_ID") },
        inverseJoinColumns = @JoinColumn(name = "ROLE_ID")
)
public Set<Role> getRoles() {
    return roles;
}
public void setRoles(Set<Role> roles) {
    this.roles = roles;
} 
}

@Entity
@Table(name = "ROLE")
@NamedQueries({
    @NamedQuery(
            name = "findRoleByName",
            query = "select r from Role r where r.name = :name "
    )
})
public class Role extends BaseObject implements Serializable, GrantedAuthority {

private Set<User> users = new HashSet<User>();
@ManyToMany(fetch = FetchType.EAGER,mappedBy = "roles")
public Set<User> getUsers() {
    return users;
}
    public void setUsers(Set<User> users) {
    this.users = users;
}
}

当我创建或更新具有角色分配的用户时,异常将如下所示

用户 id:用户 org.springframework.orm.hibernate4.HibernateOptimisticLockingFailureException:类 [com.model.User] 的对象,标识符为 [user]:乐观锁定失败;嵌套异常是 org.hibernate.StaleObjectStateException:行已被另一个事务更新或删除(或未保存的值映射不正确):[com.model.User#user] ....

原因:org.hibernate.StaleObjectStateException:行已被另一个事务更新或删除(或未保存的值映射不正确):[com.model.User#user]

我不能放懒而不是急切地获取它会导致一些其他问题(我无法从会话中获取角色),并且我不能删除它会导致角色删除的反向关系。

所以欢迎我如何解决问题的建议,并提前感谢。

4

0 回答 0