【发布时间】:2009-02-14 23:13:44
【问题描述】:
从列表中删除项目时遇到问题。该列表在超类中定义,但 Hibernate 注释应用于子类中的属性访问器。超类中有两种方法可以操作列表。 “添加”方法工作正常,但“删除”不会持续更改。我已经检查了我的 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 类的实例如下(请注意,我只使用“刷新”方法来演示该行为。即使我刷新或关闭会话并打开一个新会话,该列表也不会正确保留) :
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
谢谢。
【问题讨论】: