比方說,我有充當車庫一堆汽車的桌面應用程序:多個線程訪問數據庫:一個長事務,一個短交易
@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