Wersjonowanie się nie podbija, bo kolekcje są immutable, jeśli coś dodajesz- zmiana pozostawia referencje w spokoju przez co nie zachodzi żadna zmiana, i faktycznie u CIebie nie zmieniasz ani nie aktualizujesz encji.
Zanim zaczniesz korzystać z wersjonowania i @Version, zapoznaj się czym jest ta adnotacja i jak działa
Wszystkie pola i właściwości niebędące powiązaniami oraz wszystkie relacje należące do jednostki są uwzględniane podczas sprawdzania wersji
więc jeśli zmieniłbyś elementy kolekcji :) to realnie versja się podbija, ale u Ciebie nie robisz nic,
public void addCar(CarEntity carEntity) {
cars.add(carEntity);
carEntity.setParking(this);
}
to nie robi nic po za tym, że pozostawia encje w menaged i localnie w cashe zmienia wartość
robisz save() - widać że nie rozumiesz czym jest hibernate, nie musisz nigdy pisać obiekt.save() - on i tak zostanie zapisany czy tego chcesz czy nie :) jeśli odrywasz aktualna encje.
Hibernate ma w budowany mechanizm dirty checking, który sprawdza czy encja, która wcześniej została pobrana przez Hibernate’a, zmieniła swój stan. Jeśli tak, jest zapisywana do bazy danych. Jeśli nie, to nic się nie dzieje i użycie metody save() nie daje żadnego efektu.
Do czego klucz obcy się odwołuje kiedy piszesz
cars.add(carEntity);
carEntity.setParking(this);
do cars? do carEntity? Do czego klucz ma się odwołać?
Zapraszam do LEKTURY :
cascade=CascadeType.PERSIST)
I CZYM JEST NP. persist() oraz flush() https://vladmihalcea.com/a-beginners-guide-to-jpahibernate-flush-strategies/
Sprawdź na koniec versje w obiekcie cars :) - ona ulega zmianie, bo cars jest aktualizowane, natomiast nie aktualizowany jest Parking