@Entity
public class Meal {
@OneToMany(mappedBy = "meal", cascade = CascadeType.PERSIST)
private Collection<Food> foods;
}
Здесь mappedBy
означает, что значение поля meal
в Food
используется для предоставления значения для соответствующего столбца базы данных, связывающего Food
и Meal
(т.е. meal_id
столбец в таблице Food
). Поэтому, если вы не установите его, он всегда останется NULL.
С другой стороны, без mappedBy
означает, что значение поля foods
в Meal
используется для предоставления значения для столбца meal_id
. Причина ручной синхронизации c. им просто нужна согласованная модель OOP для работы.
CascadeType.PERSIST
не имеет ничего общего с установкой значения объекта. Он никогда не обновит значение сущностей за вас. Что помогает, так это автоматический вызов некоторых entityManager
методов для связанных сущностей. Без него вы должны позвонить по следующему номеру, чтобы сохранить всю еду и питание:
entityManager.persist(meal);
entityManager.persist(food1);
entityManager.persist(food2);
......
entityManager.persist(foodN);
С его помощью вам просто нужно позвонить
entityManager.persist(meal);
, а остальные entityManager.persist(foodN)
будут быть 'каскадным' для автоматического вызова.
Таким образом, в терминах spring-data-jpa вместо вызова
mealRepository.save(meal);
foodRepository.persist(food1);
foodRepository.persist(food2);
......
foodRepository.persist(foodN);
вам просто нужно позвонить
mealRepository.save(meal);