У меня проблемы при удалении элемента из списка. Список определен в суперклассе, но аннотации Hibernate применяются к методам доступа к свойствам в подклассе. В суперклассе есть два метода, которые управляют списком. Метод «add» работает нормально, но «remove» не сохраняет изменений. Я проверил свои настройки Cascade, и, похоже, все правильно. Я делаю то, что невозможно. Если нет, я делаю что-то неправильно?
Вот мои занятия:
@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;
}
}
Я использую экземпляр класса TemporalAsset следующим образом (обратите внимание, что я использую только метод "refresh" для демонстрации поведения. Список не сохраняется правильно, даже если я сбрасываю или закрываю сеанс и открываю новый сеанс) :
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
Спасибо.