Я работаю над приложением, которое состоит из двух моделей предметной области: Student и Meal. В этом приложении еда может быть создана через форму, и студент может быть назначен поваром для этой еды.
Кратность выглядит следующим образом:
-В обеде может быть 1 ученик в качестве повара (ManyToOne)
- Студент может быть назначен на несколько приемов пищи, которые он будет готовить (OneToMany)
Теперь у меня есть две проблемы: во-первых, когда я удаляю ученика из базы данных, я хочу, чтобы блюда, которые соответствуют удаленному ученику, также автоматически удалялись, я использую CascadeType = ALL на стороне OneToMany в ученике, но соответствующие блюда не будут удалены.
Мой код выглядит следующим образом:
Meal.Java
@Entity
public class Meal {
@Id
@GeneratedValue
private Long id;
@JoinColumn(name = "student_id")
@ManyToOne(fetch = FetchType.LAZY)
private Student mealCook;
private String mealName;
private int mealPrice;
база данных выглядит следующим образом: https://ibb.co/RH3MGrQ
Student.Java
@Entity
public class Student {
@Id
@GeneratedValue
private Long id;
private String studentName;
@OneToMany(
mappedBy = "mealCook",
cascade = CascadeType.ALL,
orphanRemoval = true
)
private List<Meal> meals = new ArrayList<>();
база данных выглядит следующим образом: https://ibb.co/vjSST6g
MealController.Java
@Controller
@RequestMapping("/m")
public class MealController {
@Autowired
private MealService mealService;
private final MealRepository mealRepository;
private final StudentRepository studentRepository;
public MealController(MealRepository mealRepository, StudentRepository studentRepository){
this.mealRepository = mealRepository;
this.studentRepository = studentRepository;
}
@GetMapping(params = "form")
public String createForm(@ModelAttribute Meal meal , Model model) {
Iterable<Student> students = this.studentRepository.findAll();
model.addAttribute("students" , students);
return "meals/form";
}
@PostMapping
public ModelAndView create(@Valid Meal meal, BindingResult result,
RedirectAttributes redirect) {
if (result.hasErrors()) {
return new ModelAndView("meals/form", "formErrors", result.getAllErrors());
}
meal = this.mealRepository.save(meal);
redirect.addFlashAttribute("globalMessage", "meals.view.success");
return new ModelAndView("redirect:/m/{meal.id}", "meal.id", meal.getId());
}
Моя вторая проблема - я хочу отобразить все блюда, которые готовит конкретный студент, но в моей базе данных не будут отображаться идентификаторы еды, которые связаны со студентом. Я добавил скриншот для того, чего я пытаюсь достичь: https://ibb.co/2s6rMqt
У меня вопрос, как я могу отобразить колонку еды в таблице моего ученика?
Надеюсь, я проиллюстрировал свою проблему достаточно ясно, заранее спасибо!