比方说,我有充当车库一堆汽车的桌面应用程序:多个线程访问数据库:一个长事务,一个短交易
@Entity
public class Garage {
private List<Car> cars = new ArrayList<Car>();
...
}
的桌面应用程序有一个“模拟“按钮,启动一个新的线程并开始调用车库,汽车,车轮等方法。这种模拟可能需要长达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();
此代码仅做“读”,也不会“写”
所以上面可以根据汽车如何迫切需要花费很长的时间一项服务。在发生上述情况时,用户可能会继续使用桌面应用程序工作。他们可能会选择更改上述交易中使用的汽车的颜色。
我的问题是,上述长交易是否会阻止汽车颜色的改变?即用户改变桌面应用程序中汽车的颜色将被阻止提交更改,直到长交易完成为止?
为什么你需要一个交易来阅读?你在使用懒惰抓取? – saugata 2010-12-20 07:18:24
'更新线程'必须是单个事务单元吗?还是没有更新?你说:“这段代码只是'读'而不写',然后 - 就像saugata问 - 为什么你需要交易? – 2010-12-20 07:36:04
是的,在汽车上调用的方法可能类似于getWheels(),它们正在延迟获取 – digiarnie 2010-12-20 08:12:32