2016-08-05 3 views
1

Всякий раз, когда я пытаюсь сохранить пользователь в мою базу данных MySql, это только сохранение данных в пользователь таблицу а не ролей пользователя и роль таблицы. Некоторая помощь будет принята с благодарностью.Hibernate модель пользователя не спасает пользователь-роль и роли

(Каждый пользователь имеет множество ролей и каждая роль может принадлежать многим пользователям)

у меня есть 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); 

ответ

1

Причина Наблюдаете это связано с тем, что Role является объектом, который управляет отношением @ManyToMany между ним и User, но вы не обновляете объект 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. Спасибо! –

Смежные вопросы