Powiedzmy mam aplikacji pulpitu, który działa jako garaż na kilka samochodów:wielu wątków dostępu do bazy danych: jedna z długimi transakcji, jednej z krótkich transakcji
@Entity
public class Garage {
private List<Car> cars = new ArrayList<Car>();
...
}
Aplikacja Desktop „symulacją "przycisk uruchamiający nowy wątek i rozpoczynający wywoływanie metod w garażu, samochodzie, kole itp. Symulacja może trwać nawet 10 minut. W tej chwili mam klasy, który wygląda tak:
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();
Ten kod tylko nie „czyta” i nigdy nie „pisze”
Więc powyżej może zająć dużo czasu, w zależności od tego, jak źle samochody potrzebują serwis. W tym czasie użytkownik może nadal korzystać z aplikacji komputerowej. Mogą wybrać zmianę koloru samochodu, który jest używany w powyższej transakcji.
Moje pytanie brzmi, czy powyższa długa transakcja ma zapobiec zmianie koloru samochodu? tj. użytkownik zmieniający kolor samochodu w aplikacji komputerowej nie będzie mógł dokonać zmiany do czasu zakończenia długiej transakcji?
Dlaczego potrzebna jest transakcja do przeczytania? Czy używasz leniwego pobierania? – saugata
Czy "wątek aktualizacji" musi być pojedynczą jednostką transakcyjną? Czy nie ma żadnych aktualizacji? Mówisz "Ten kod tylko" czyta "i nigdy" nie pisze ", a następnie - jak zapytał Saugata - dlaczego potrzebujesz transakcji? –
tak, metody, które są wywoływane w samochodzie, mogą być czymś w stylu getWheels() i leniwie pobrano: – digiarnie