Tengo problemas para eliminar un elemento de una lista. La lista se define en una superclase, pero las anotaciones de Hibernate se aplican a los descriptores de acceso de propiedades en una subclase. Hay dos métodos en la superclase que manipulan la lista. El método "agregar" funciona bien, pero el "quitar" no persiste los cambios. Revisé la configuración de Cascade y parece que tengo las cosas correctas. Estoy haciendo algo que es imposible. Si no, ¿estoy haciendo algo incorrectamente?Hibernar: Quitar elemento de una lista no persiste
Éstos son mis clases:.
@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;
}
}
utilizo una instancia de la clase TemporalAsset de la siguiente manera (nótese que sólo estoy uso el método de "refresh" para demostrar el comportamiento La lista no persiste correctamente incluso si limpio o cierro la sesión y abro una nueva sesión):
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
Gracias.
¡Eso fue todo! muchas gracias – codefinger
CascadeType.DELETE_ORPHAN está en desuso. ¿Hay una alternativa? –
usa @OneToOne (orphanRemoval = true) o @OneToMany (orphanRemoval = true) de acuerdo con http://docs.jboss.org/hibernate/orm/3.5/api/org/hibernate/annotations/CascadeType.html – FoxyBOA