【发布时间】:2015-06-23 11:16:35
【问题描述】:
我在Family 和Person 之间有双向映射:
@Entity class Family {
@OneToMany(mappedBy = "family", ...)
Set<Person> persons;
...
}
@Entity class Person {
@ManyToOne
Family family;
...
}
我的问题是我可以同时从集合中添加和/或删除元素,这会破坏更新中的原子性,因为添加新人会创建 INSERT INTO Person ... 不会与其他插入冲突的语句。 @Version 字段没有帮助,因为我没有将Family 实体更新为表中的行,只是在逻辑上。
我应该怎么做才能只启用集合的原子更新?我曾尝试用LockMode.PESSIMISTIC_WRITE 加载Family,这可以同步Family 本身的更新,但这不允许对Family 的读取进行二级缓存。我更喜欢在数据库中具有谓词约束的乐观事务。
【问题讨论】:
-
因此你必须使用事务!