Je rencontre des problèmes lors de la suppression d'un élément d'une liste. La liste est définie dans une superclasse, mais les annotations Hibernate sont appliquées aux accesseurs de propriété dans une sous-classe. Il y a deux méthodes dans la superclasse qui manipulent la liste. La méthode "add" fonctionne correctement, mais "remove" ne conserve pas les modifications. J'ai vérifié mes paramètres en cascade, et il me semble que les choses sont correctes. Est-ce que je fais quelque chose d'impossible? Si non, est-ce que je fais quelque chose de mal?Mise en veille prolongée: la suppression d'un élément d'une liste ne persiste pas
Voici mes classes:.
@Entity
abstract class Temporal<T> {
@Id
@GeneratedValue
private Long id;
@Version
private Integer version = null;
@Transient
protected List<T> content = new ArrayList<T>();
public void remove(T value) {
// business logic ...
content.remove(value);
}
public void add(T value) {
// business logic ...
content.add(value);
}
}
@Entity
@AccessType("property")
class TemporalAsset extends Temporal<Asset> {
@OneToMany(cascade = CascadeType.ALL, mappedBy = "temporal")
public List<Asset> getContent() {
return super.content;
}
protected void setContent(List<Asset> list) {
super.content = list;
}
}
J'utilise une instance de la classe TemporalAsset comme suit (notez que je n'utilise que la méthode « rafraîchir » pour démontrer le comportement La liste ne correctement persiste même pas si je vide ou ferme la session et ouvre une nouvelle session):
temporalAsset.add(value1);
temporalAsset.getContent().size() == 1; // true
session.update(temporalAsset);
session.refresh(temporalAsset);
temporalAsset.getContent().size() == 1; // true
temporalAsset.remove(value1);
temporalAsset.getContent().size() == 0; // true
session.update(temporalAsset);
session.refresh(temporalAsset);
temporalAsset.getContent().size() == 0; // false, its 1
Merci.
C'était tout! merci beaucoup – codefinger
CascadeType.DELETE_ORPHAN est obsolète. Y a-t-il une alternative? –
utilisez @OneToOne (orphanRemoval = true) ou @OneToMany (orphanRemoval = true) selon http://docs.jboss.org/hibernate/orm/3.5/api/org/hibernate/annotations/CascadeType.html – FoxyBOA