我遇到了jpa和hibernate的一個討厭的bug。我有一個記賬類別有以下注釋:當對象從集合中刪除時,Hibernate更新一對多集合
@OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER)
@JoinColumn(name="ch1_id", referencedColumnName="id")
private List<BillingItem>billingItems = new ArrayList<BillingItem>();
現在我需要從收集過濾器中刪除的項目,但不能使用任何東西,但JPA。不允許使用hibernate特定的註釋。所以我寫了一個帖子負載功能:
@PostLoad
public void postLoad() {
ArrayList<BillingItem>tempItems = new ArrayList<BillingItem>();
Iterator<BillingItem> i = this.billingItems.iterator();
BillingItem item;
while(i.hasNext()) {
item = i.next();
if(item.getStatus().equals("D")) {
tempItems.add(item);
}
}
this.billingItems.removeAll(tempItems);
}
然而,當有被刪除的項目篩選我看到
休眠:更新billing_on_item設置ch1_id =空在那裏ch1_id =?和id =?
它產生一個異常,因爲ch1_id是一個外鍵,不能爲空。然而,hibernate將參數綁定到正確的值。爲什麼此更新首先發生?我如何糾正錯誤?
由於提前,
蘭迪
謝謝你!我從來沒有想到像這樣簡單優雅的解決方案。說得通。 – randy