從列表中刪除項目時遇到問題。該列表在超類中定義,但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