Допустим, у меня есть настольное приложение, которое действует как гараж для нескольких машин:
@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();
Этот код только «читает» и никогда не «пишет»
Так что приведенное выше может занять много времени в зависимости от того, каксильно автомобили нуждаются в обслуживании.В то время как вышеупомянутое случается, пользователь может продолжить работать, используя настольное приложение.Они могут изменить цвет автомобиля, который используется в вышеуказанной транзакции.
Мой вопрос заключается в том, собирается ли указанная выше длинная транзакция предотвратить изменение цвета автомобиля?то есть пользователь, изменяющий цвет автомобиля в настольном приложении, не сможет зафиксировать изменение, пока не завершится длинная транзакция?