2つのオブジェクトエンティティ(UserおよびPhone)があり、多対多リレーションシップを持つことになっています。親行を削除または更新できませんConstraintViolationException
User.java
//all columns
@ManyToMany(cascade = CascadeType.MERGE, fetch = FetchType.EAGER)
@JoinTable(name = "USER_PHONE",
joinColumns = @JoinColumn(name = "user_id", referencedColumnName = "id"),
inverseJoinColumns = @JoinColumn(name = "phone_id", referencedColumnName = "id"))
private List<Phone> phones;
//all columns @ManyToMany(cascade = CascadeType.MERGE, fetch = FetchType.EAGER) @JoinTable(name = "USER_PHONE", joinColumns = @JoinColumn(name = "phone_id", referencedColumnName = "id"), inverseJoinColumns = @JoinColumn(name = "user_id", referencedColumnName = "id")) private List<User> userList;
Phone.java
は今、私は私のUSERテーブルにIDが1と2との2人のユーザーを追加します。 次に、id 1の電話を1つ追加し、両方のユーザID(1 & 2)にマッピングします。マイUSER_PHONEテーブルは以下のようになります。私はこれをしようとすると
Select * from USER_PHONE;
+----------+---------+
| phone_id | user_id |
+----------+---------+
| 1 | 1 |
| 1 | 2 |
+----------+---------+
さて、私はID 2. でユーザーを削除したい、私はエラー
javax.persistence.PersistenceException: org.hibernate.exception.ConstraintViolationException: Cannot delete or update a parent row: a foreign key constraint fails (`dbname`.`USER_PHONE`, CONSTRAINT `FKC6A847DAFA96A429` FOREIGN KEY (`user_id`) REFERENCES `USER` (`ID`))
私を取得しますスクリプトを削除:
String query = "DELETE User where id=?1";
try{
Query q = entityManager.createQuery(query);
q.setParameter(1,id);
q.executeUpdate();
System.out.println(System.currentTimeMillis() + " DELETE: userId " + id + " ==> deleted");
} catch(Exception e){
e.printStackTrace();
return false;
}
私は間違っていますか? ありがとうございました:)
ありがとう@ Shubham。それはとてもうまくいった。 –