从列表中删除项目时遇到问题。该列表在超类中定义,但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
谢谢。
就是这样!非常感谢 – codefinger 2009-02-15 15:41:50
CascadeType.DELETE_ORPHAN已弃用。有其他选择吗? – 2012-03-01 14:27:02