данный родительский объект
@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