假设我有一个桌面应用程序,可以充当一堆汽车的车库:
@Entity
public class Garage {
private List
桌面应用程序有一个“模拟”按钮,可以启动一个新线程并开始调用Garage,Car,Wheel等方法.此模拟可能需要长达10分钟才能运行.目前我有一个看起来像这样的课程:
beginTransaction();
Garage garage = garageDao.findGarage(1);
List
此代码只执行“读取”而从不“写入”
因此,上述情况可能需要很长时间,具体取决于汽车需要多少服务.在发生上述情况时,用户可以继续使用桌面应用程序.他们可能会选择更改上述交易中使用的汽车颜色.
我的问题是,上述长期交易是否会阻止汽车颜色的变化?即,在长期交易完成之前,将阻止用户更改桌面应用程序中汽车的颜色?
最佳答案
为什么要这样?默认情况下,您使用乐观事务,因此没有锁定应用于正在读取的行(除非您没有向我们展示一些JPA2 lock()调用).然后,事务提交应检查记录的乐观版本(如果已定义版本)并使用它来决定是否提交更改.