Hãy nói rằng tôi có một ứng dụng máy tính để bàn mà đóng vai trò như một nhà để xe cho một loạt các xe:Nhiều Chủ đề truy cập vào cơ sở dữ liệu: một với giao dịch dài, một với các giao dịch ngắn
@Entity
public class Garage {
private List<Car> cars = new ArrayList<Car>();
...
}
Ứng dụng máy tính để bàn có một "mô phỏng "nút bắt đầu một chuỗi mới và bắt đầu gọi các phương thức trên Nhà để xe, Ô tô, Bánh xe, v.v. Mô phỏng này có thể mất tới 10 phút để chạy. Hiện nay tôi có một lớp trông như thế này:
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();
Mã này chỉ làm "đọc" và không bao giờ "viết"
Vì vậy, ở trên có thể mất nhiều thời gian tùy thuộc vào cách nặng những chiếc xe cần một dịch vụ. Trong khi điều trên xảy ra, người dùng có thể tiếp tục làm việc bằng ứng dụng dành cho máy tính để bàn. Họ có thể chọn thay đổi màu sắc của một chiếc xe đang được sử dụng trong giao dịch trên.
Câu hỏi của tôi là liệu giao dịch dài trên có ngăn chặn sự thay đổi màu của xe không? tức là người dùng thay đổi màu sắc của ô tô trong ứng dụng dành cho máy tính để bàn sẽ bị ngăn không cho thực hiện thay đổi cho đến khi giao dịch dài kết thúc?
Tại sao bạn cần giao dịch để đọc? Bạn đang sử dụng tìm nạp lười? – saugata
Phải là 'chuỗi cập nhật' là một đơn vị giao dịch duy nhất? Hoặc không có cập nhật? Bạn nói "Mã này chỉ làm 'đọc' và không bao giờ 'viết'. Sau đó - như saugata hỏi - tại sao bạn cần giao dịch? –
có các phương pháp được gọi trên xe hơi có thể giống như getWheels() và chúng đang bị lười biếng đã tìm nạp số – digiarnie