0
我有以下實體:JPA代替1:M集的實體
@Entity
public class Alert implements Serializable {
private long alertId;
private Set<AlertTime> alertTimes = new HashSet<AlertTime>(0);
@OneToMany(cascade = CascadeType.ALL)
public Set<AlertTime> getAlertTimes() {
return alertTimes;
}
}
而且
@Entity
public class AlertTime implements Serializable {
private long alertTimeId;
private Date time;
private Alert alert;
@ManyToOne
public Alert getAlert() {
return this.alert;
}
當我需要更新Alert
可能有不同數量的AlertTime
S,所以我試圖合併Alert
並刪除AlertTime
並堅持新的。問題在於(AlertTime.alertTimeId,AlertTime.time)有一個唯一的索引,當我嘗試刪除然後在同一個事務中持久化時,SQL插入在刪除之前發生,這違反了約束。我可以在單獨的事務中刪除AlertTime
的實體,但我希望這一切都在一個事務中,以便在調用後端Web服務時發生異常時可以回滾所有更改。
有沒有更好的方法能夠更改Alert
實體的alertTimes
?或者,是否有可能在插入之前至少強制SQL刪除?
不刷新提交到數據庫,所以我不能回滾調用flush()之前所做的更改?我已經使用您的解決方案工作,謝謝。 – ravun 2011-02-16 13:07:39