给定的父实体
@Entity
public class Expenditure implements Serializable {
...
@OneToMany(mappedBy = "expenditure", cascade = CascadeType.ALL, orphanRemoval = true)
@OrderBy()
private List<ExpenditurePeriod> periods = new ArrayList<ExpenditurePeriod>();
@Version
private Integer version = 0;
...
}
和孩子一
@Entity
public class ExpenditurePeriod implements Serializable {
...
@ManyToOne
@JoinColumn(name="expenditure_id", nullable = false)
private Expenditure expenditure;
...
}
在一个事务中同时更新父级和子级时,会抛出 org.hibernate.StaleObjectStateException:行已被另一事务更新或删除(或未保存值映射不正确):
实际上,hibernate 发布了两个 sql 更新:一个更改父属性,另一个更改子属性。你知道摆脱父母更新改变孩子的方法吗?更新导致乐观锁效率低下和误报。请注意,孩子和父母都正确地将他们的状态保存在数据库中。
Hibernate 版本是 3.5.1-Final