Представьте себе следующую ситуацию: у нас есть две таблицы базы данных, Арендатор и Дом .Ссылки на арендаторов House с отображением @ManyToOne
.
Tenant tenant = tenantRepository.findById(id).orElseThrow();
House house = tenant.getHouse();
house.setPrice(340_000);
house = houseRepository.save(house); // A new instance is returned by the CrudRepository::save() method
// TODO Is this necessary for further use?
tenant.setHouse(house);
// Further use...
tenant.setAge(23);
tenant = tenantRepository.save(tenant); // Otherwise it is saved with the old reference where house's ID can be null?
...
Нужно ли обновлять Арендатора новой ссылкой House?
РЕДАКТИРОВАТЬ: Для пояснения вы можете предположить, что объекты были загружены (следовательно, в управляемом состоянии) непосредственно перед приведенным выше кодом.И поскольку эта «транзакция» является частью функции Spring @RequestMapping
, транзакция будет неявно зафиксирована в конце ее.
РЕДАКТИРОВАТЬ 2: Вопрос не должен ли я вообще спасать дом или нет, чтобы избежать этой ситуации.Речь идет о лучшем понимании того, как управляются объекты.
--- Но вы также можете сказать мне, должен ли я сначала обновить все и сохранить в конце, так какобычная практика?