jpa と hibernate で厄介なバグに遭遇しました。次の注釈が付いた課金クラスがあります。
@OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER)
@JoinColumn(name="ch1_id", referencedColumnName="id")
private List<BillingItem>billingItems = new ArrayList<BillingItem>();
コレクションから削除されたアイテムをフィルタリングする必要がありますが、jpa 以外は使用できません。休止状態固有の注釈は許可されていません。だから私はロード後の関数を書きました:
@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);
}
ただし、フィルターする削除済みアイテムがある場合は、
Hibernate: billing_on_item set ch1_id=null を更新します。ch1_id=? そしてid=?
ch1_id は外部キーであり、null にすることはできないため、例外が発生します。ただし、休止状態はパラメーターを正しい値にバインドしています。そもそもなぜこの更新が行われるのですか? エラーを修正するにはどうすればよいですか?
前もって感謝します、
ランディ