KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I am having trouble when removing an item from a list. The list is defined in a superclass, but the Hibernate annotations are applied to property accessors in a subclass. There are two methods in the superclass that manipulate the list. The "add" method works fine, but the "remove" does not persist changes. I have checked my Cascade settings, and I seem to have things correct. Am I doing something that is impossible. If not, am I doing something incorrectly? Here are my 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; } } I use an instance of the TemporalAsset class as follows (note that I am only use the "refresh" method to demonstrate the behavior. The list does not persist correctly even if I flush or close the session and open a new 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 Thanks.
Tags (comma-separated)
Save Edits
Cancel