J'ai rencontré un bogue avec jpa et hibernate. J'ai une classe de facturation avec l'annotation suivante:Hibernate mettant à jour une collection à plusieurs quand l'objet a été retiré de la collection
@OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER)
@JoinColumn(name="ch1_id", referencedColumnName="id")
private List<BillingItem>billingItems = new ArrayList<BillingItem>();
Maintenant je dois filtrer les éléments supprimés de la collection, mais ne peut pas utiliser autre chose que JPA. Aucune annotation spécifique d'hibernation autorisée. J'ai donc écrit une fonction post-charge:
@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);
}
Cependant quand il y a des éléments supprimés pour filtrer je vois
Mise en veille prolongée: mise à jour billing_on_item définie = null ch1_id où ch1_id =? et id =?
qui produit une exception car ch1_id est une clé étrangère et ne peut pas être nulle. Cependant, hibernate lie les paramètres pour corriger les valeurs. Pourquoi cette mise à jour se produit-elle en premier lieu? Comment puis-je corriger l'erreur?
Merci à l'avance,
Randy
Merci l'homme! Je n'ai même jamais pensé à une solution élégante et simple comme celle-ci. Logique. – randy