私のSpring-Bootアプリケーションに保存するユーザーロール多対多リレーション対応データベースのマッピングテーブルにhibernate私にエラーメッセージ。対応するマッピングテーブルに多対多リレーションシップを保存する
マイ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;
}
マイ実行 -method:
@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_user
FOREIGN KEY(users_id
)UPDATE CASCADE ON DELETE CASCADE ONusers
(id
)を参照)
私はthis siteから建設を持っており、それはそれで動作しますが、私のコードでは、それは動作しません。
[this](https://hellokoding.com/jpa-many-to-many-extra-columns-relationship-mapping-example-with-spring-boot-maven-and-mysql/)のような意味ですか? –
完全ではありません。あなたはあなたのUserとRoleクラスを持っています。 ManyToManyをOneToManyに変更して、新しいエンティティ:UserRoleに設定します。ユーザーと役割に対する2つのManyToOne関係でそれを作成します。あなたは今問題がなくなり、余分に:関係について質問する可能性がある。 (私はこれを私の答えに追加してもっと明確にします) –
ありがとうございました。私は実際に働いている会社の友人に尋ね、彼は私を助けました。答えとして解決策を掲載しました。 –