java - Hibernate 用户模型不保存用户角色和角色

标签 java mysql hibernate spring-mvc jpa

每当我尝试将用户保存到 MySql 数据库时,它仅将数据保存到 users 表,而不是 roles-userrole 表。一些帮助将不胜感激。

(每个用户有多个角色,每个角色可以属于多个用户)

我的数据库中有 3 个表:

users:       (id,username)
roles_users: (user_id, role_id)
roles:       (id,role)

后跟两个 Hibernate 实体:

这是我的用户模型:

@Entity(name = "users")
public class User{

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String username;

@ManyToMany(mappedBy = "users", cascade = CascadeType.PERSIST)
private Set<Role> roles;

public Long getId() {
    return id;
}

public String getUsername() {
    return username;
}

public void setUsername(String username) {
    this.username = username;
}

public Set<Role> getRoles() {
    if (roles == null) {
        roles = new HashSet();
    }
    return roles;
}

public void setRoles(Set<Role> roles) {
    this.roles = roles;
}
}

这是我的榜样:

@Entity(name = "roles")
public class Role {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String name;

@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "roles_users",
        joinColumns = @JoinColumn(name = "role_id"),
        inverseJoinColumns = @JoinColumn(name = "user_id"),
        uniqueConstraints = {@UniqueConstraint(columnNames = {"role_id", "user_id"})})
private Set<User> users;

public Long getId() {
    return id;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public Set<User> getUsers() {
    if (users == null) {
        users = new HashSet();
    }
    return users;
}

public void setUsers(Set<User> users) {
    this.users = users;
}
}

这是我用来保存用户及其角色的代码:

    User user = new User();
    Role role = new Role();
    Set<User> userSet = new HashSet();
    Set<Role> roleSet = new HashSet();

    user.setUsername("Peter");
    role.setName("ROLE_ADMIN");
    userSet.add(user);
    roleSet.add(role);

    role.setUsers(userSet);
    user.setRoles(roleSet);

    userService.saveUser(user);

最佳答案

您观察到此情况的原因是因为 Role 是管理它与 User 之间的 @ManyToMany 关系的实体,但您不是更新代码中的 Role 对象。我可能会认为这是落后的,用户可能应该拥有这种关系。

如果您考虑一下,您可以单独创建 Role 对象,然后将它们分配给各种 User 对象,如代码所示。因此,User 拥有该关系是有道理的。

// Transaction 1
Role role = new Role( "ADMIN" );
session.save( role );

// Transaction 2
User user = new User( "Naros" );
user.getRoles().add( roleService.getRoleByName( "ADMIN" ) );
session.save( user );

关于java - Hibernate 用户模型不保存用户角色和角色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38794321/

相关文章:

java - 未经检查的转换编译器警告 java

java - Nexus & Maven Corporate Pom - 它应该包含什么?

java - 单击 JButton 时如何更改 JLabel?

java - Java groupingBy 收集器是否保留列表顺序?

php - 使用 MySQL 数据库中的详细信息将动态创建的一组图像中的数据动态传递到 Modal

mysql - 如何在所有行中使用不同的值更新列?

php - Mysql表格单元格在点击时不会改变值

java - JPA父子关系

hibernate - HikariCP 连接泄漏检测和 hibernate

java - 使用 Lombok 的显式构造函数?