2016-08-05 18 views
1

を保存していない、それだけでユーザーテーブルではなく役割にユーザー役割テーブルにデータを保存しています。助けていただければ幸いです。Hibernateのユーザーモデルは、ユーザーの役割と役割

各ユーザーは多くの役割を持っており、それぞれの役割が多くのユーザーに属することができます)

私は、データベース内の3つのテーブルがあります。

:2つのHibernateのエンティティが続く

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

これは私のユーザーモデルです:

@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); 

答えて

1

あなたが観察した理由これは、RoleがそれとUserの間の@ManyToManyの関係を管理するエンティティであるが、Roleオブジェクトを更新していないためですあなたのコードで。私はおそらくそれが逆であると主張し、Userはおそらく関係を所有すべきであると主張します。

考えてみると、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); 
+0

...私はそれをより速く見たはずです。関係を切り替えて、ユーザーがRoleオブジェクトを保存するようになりました。どうも! –

関連する問題