【发布时间】:2017-07-14 00:13:55
【问题描述】:
在我的 Spring-Boot 应用程序中,我想将 User-Role 多对多关系保存在我数据库中相应的映射表中,但 hibernate 给了我一条错误消息。 p>
我的 User.java 类:
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
Long id;
String firstname;
String lastname;
String username;
String password;
@ManyToMany(mappedBy = "users")
private Set<Role> roles;
}
我的 Role.java 类:
@Entity
@Table(name = "roles")
public class Role {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
Long id;
String name;
String description;
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(
name = "role_users",
joinColumns =
@JoinColumn(name = "users_id", referencedColumnName = "id"),
inverseJoinColumns =
@JoinColumn(name = "roles_id", referencedColumnName = "id")
)
private Set<User> users;
}
我的运行-方法:
@Override
@Transactional
public void run(String... strings) throws Exception {
//add new Roles
Role roleA = new Role("Rolle A");
Role roleB = new Role("Rolle B");
Role roleC = new Role("Rolle C");
//add new Users
User userA = new User("FirstnameA", "LastnameA", "UsernameA", "PasswordA");
User userB = new User("FirstnameB", "LastnameB", "UsernameB", "PasswordB");
//add new Lists of Roles
Set<Role> rolesA = new HashSet<Role>();
rolesA.add(roleA);
rolesA.add(roleB);
Set<Role> rolesB = new HashSet<Role>();
rolesB.add(roleA);
rolesB.add(roleC);
//add a list of roles in one user, two times
userA.setRoles(rolesA);
userB.setRoles(rolesB);
//save both users in db
userRepository.save(userA); //rolle AB
userRepository.save(userB); //rolle AC
//give each role the corresponding user
Set<User> usersA = new HashSet<User>();
usersA.add(userA);
usersA.add(userB);
roleA.setUsers(usersA);
roleRepository.save(roleA);
Set<User> usersB = new HashSet<User>();
usersB.add(userA);
roleB.setUsers(usersB);
roleRepository.save(roleB);
Set<User> usersC = new HashSet<User>();
usersC.add(userB);
roleC.setUsers(usersC);
roleRepository.save(roleC);
}
Hibernate 给了我一个错误信息:
无法添加或更新子行:外键约束失败 (
projekt_gra.role_users, CONSTRAINTfk_roleusers_userFOREIGN KEY (users_id) REFERENCESusers(id) ON DELETE CASCADE ON UPDATE级联)
我有来自this site 的构造,它可以使用它,但在我的代码中它不起作用。
【问题讨论】:
标签: java mysql spring hibernate jpa