指定された親エンティティ
@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;
...
}
と子1
@Entity
public class ExpenditurePeriod implements Serializable {
...
@ManyToOne
@JoinColumn(name="expenditure_id", nullable = false)
private Expenditure expenditure;
...
}
1 つのトランザクションで親と子の両方を更新しているときに、org.hibernate.StaleObjectStateException がスローされます: 別のトランザクションによって行が更新または削除されました (または、保存されていない値のマッピングが正しくありませんでした):
実際、hibernate は 2 つの SQL 更新を発行します。1 つは親プロパティを変更し、もう 1 つは子プロパティを変更します。親の更新が子を変更するのを取り除く方法を知っていますか? この更新により、楽観的ロックの非効率性と誤検知が発生します。子と親の両方が状態を DB に正しく保存することに注意してください。
Hibernate のバージョンは 3.5.1-Final です