Ну, каскадирование это что-то еще, позвольте мне спросить вас кое-что.Выполните следующие действия:
Thing thing = session.get(Thing .class, someId);
thing.getThingType().setTitle("new title");
и ничего более, снова вы увидите обновления гибернации thingType
.
Это называется грязной проверкой, если объект подключен к активному сеансу гибернации.и его состояние сохранения изменяется, Hibernate автоматически обновляет связанную строку в базе данных.Событие без вызова сохранения или обновления.
Так что же такое каскад?Рассмотрим следующий случай:
Thing myThing = new Thing();
ThingType myThingType = new ThingType();
myThing.setThingType(myThingType);
session.save(myThing);
, если тип каскада ассоциации не установлен, тогда вы получите исключение, потому что вы ссылаетесь на временный объект thingType
.Но если вы установите постоянный тип каскада, то спящий режим сначала сохраняет thingType
, а затем сохраняет thing
, и все идет хорошо.
Так что помните, если вы выбираете объект, то обновите его свойствав том же сеансе нет необходимости вызывать метод update
или saveOrUpdate
в сеансе hibernate (или jpa entityManager), поскольку он уже находится в состоянии attached
и его состояние отслеживается hibernate.