我在 jpa 和 hibernate 中遇到了一个令人讨厌的错误。我有一个带有以下注释的计费类:
@OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER)
@JoinColumn(name="ch1_id", referencedColumnName="id")
private List<BillingItem>billingItems = new ArrayList<BillingItem>();
现在我需要从集合中过滤已删除的项目,但只能使用 jpa。不允许使用特定于休眠的注释。所以我写了一个post load函数:
@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=null where ch1_id=? 和身份证=?
这会产生异常,因为 ch1_id 是外键并且不能为空。然而,休眠将参数绑定到正确的值。为什么首先会发生此更新?如何纠正错误?
提前致谢,
兰迪