dig*_*nie 5 java database hibernate jpa
假设我有一个桌面应用程序,可以充当一堆汽车的车库:
@Entity
public class Garage {
private List<Car> cars = new ArrayList<Car>();
...
}
Run Code Online (Sandbox Code Playgroud)
桌面应用程序有一个"模拟"按钮,可以启动一个新线程并开始调用Garage,Car,Wheel等方法.此模拟可能需要长达10分钟才能运行.目前我有一个看起来像这样的课程:
beginTransaction();
Garage garage = garageDao.findGarage(1);
List<Car> cars = garage.getCars();
for (Car car : cars) {
// call methods on the car to lazily fetch other things like wheels...
}
commitTransaction();
Run Code Online (Sandbox Code Playgroud)
此代码只执行"读取"而从不"写入"
因此,上述情况可能需要很长时间,具体取决于汽车需要多少服务.在发生上述情况时,用户可以继续使用桌面应用程序.他们可能会选择更改上述交易中使用的汽车颜色.
我的问题是,上述长期交易是否会阻止汽车颜色的变化?即,用户在桌面应用程序中更改汽车的颜色将被阻止提交更改,直到长事务完成?
为什么应该这样?默认情况下,您使用乐观事务,因此不会对正在读取的行应用锁定(除非您没有向我们展示一些 JPA2 lock() 调用)。然后,事务的提交应该检查记录的乐观版本(如果您定义了版本)并使用它来决定是否提交更改。
归档时间: |
|
查看次数: |
801 次 |
最近记录: |