我有一個一對多的關係如下@OneToMany錯誤:無法刪除或更新父行,外鍵約束失敗
@Entity
@Table(name = "reminderheader")
public class ReminderHeader implements Serializable {
@Id
@org.hibernate.annotations.GenericGenerator(name = "REMINDER_HEADER_GEN", strategy = "native")
@GeneratedValue(generator = "REMINDER_HEADER_GEN")
@Column(name = "id", unique = true, nullable = false)
@Basic(fetch = FetchType.EAGER)
private long id;
@OneToMany(fetch = FetchType.EAGER, orphanRemoval = true)
@Cascade(value = { CascadeType.SAVE_UPDATE, CascadeType.DELETE })
@JoinColumn(name = "HeaderID")
@Fetch(FetchMode.SELECT)
private Set<ReminderDetails> reminderDetailslist;
}
和
@Entity
@Table(name = "reminderdetails")
public class ReminderDetails implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", unique = true, nullable = false)
@Basic(fetch = FetchType.EAGER)
private long id;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "HeaderID", nullable = false)
private ReminderHeader reminderHeader;
}
當我想要從MySQL數據庫中刪除ReminderHeader
如下
String query = "delete ReminderHeader rHdr where rHdr.recipientGUID = :rHeaderGUID ";
Query myQry = getCurrentSession().createQuery(query);
myQry.setString("rHeaderGUID", RemHeaderGUID);
int deletedRow = myQry.executeUpdate();
然後我得到以下錯誤
Cannot delete or update a parent row: a foreign key constraint fails
如何刪除ReminderHeader
及其ReminderDetails
兒童沒有得到這個錯誤?
更新:我改變一對多的關係,如下所示:
@OneToMany(fetch = FetchType.EAGER, orphanRemoval = true, mappedBy = "reminderHeader")
@Cascade(value = { CascadeType.SAVE_UPDATE, CascadeType.DELETE })
@Fetch(FetchMode.SELECT)
private Set<ReminderDetails> reminderDetailslist;
和
@ManyToOne(fetch = FetchType.EAGER)
private ReminderHeader reminderHeader;
和我用下面的方法用於刪除
String query = "From ReminderHeader rHdr where rHdr.recipientGUID = :rHeaderGUID ";
Query myQry = getCurrentSession().createQuery(query);
myQry.setString("rHeaderGUID", RemHeaderGUID);
List<ReminderHeader> remList = myQry.list();
for (int i = 0; i < remList.size(); i++) {
getCurrentSession().delete(remList.get(i));
}
但它並沒有改變數據庫中的任何內容,也沒有出現錯誤或異常。
我將兩個bean更改爲: – 2011-12-25 11:29:11
請檢查我的更新 – 2011-12-25 11:35:41
如果您在數據庫中沒有任何更改,則可能是查詢未返回任何內容或發生了回滾。進入調試模式,並檢查生成的SQL查詢。 – 2011-12-25 12:45:33