【发布时间】:2021-03-18 05:59:17
【问题描述】:
我几乎整天都在寻找答案,但不知道如何解决这个问题。所以这就是我问的原因,请指教。
我有 2 个实体,Patient 和 Dietician - 他们都存储在一个名为 users 的表中 - 我有一个名为 User 的父实体,Patient/Dietician 继承自它。
我想要做什么,我有一个关于哪些患者可以更新关于他自己的信息的视图(他必须说他的年龄、身高、体重、他想要什么类型的饮食,他可以从下拉列表中选择营养师列表(那些营养师已经存在于数据库表中)我现在想要做的是我想用这些信息保存患者,但每次我保存它时都会保存这些信息但也会创建新的营养师条目(复制它)或说明他无法创建该营养师,因为电子邮件地址字段是唯一的(这就是我想要的)。为什么每次我保存它时都会为多对一关系创建一个新条目?为什么这不能使用现有的营养师,而只需将 FK (dietician_id) 设置为现有营养师的身份证。
这是一堆代码
@Entity
@DiscriminatorValue("1")
public class Patient extends User {
private Double weight;
private Double height;
private Integer age;
@Enumerated(value = EnumType.STRING)
private DietType dietType;
@Enumerated(value = EnumType.STRING)
private Gender gender;
@Enumerated(value = EnumType.STRING)
private PsychicalActivity psychicalActivity;
@OneToMany(mappedBy = "patient", cascade = CascadeType.ALL)
private List<Diet> diets;
@ManyToOne(cascade = CascadeType.ALL)
private Dietician dietician;
@OneToMany(mappedBy = "patient", cascade = CascadeType.ALL)
private List<Visit> visits;
@Entity
@DiscriminatorValue("2")
public class Dietician extends User {
@OneToMany(mappedBy = "dietician", cascade = CascadeType.ALL)
private Set<Patient> patients;
@OneToMany(mappedBy = "dietician", cascade = CascadeType.ALL)
private Set<Visit> visits;
public Dietician() {}
public Dietician(String firstName, String lastName, String emailAddress, String password, Set<Role> roles) {
super(firstName, lastName, emailAddress, password, roles);
}
@PostMapping("/update-data")
public String sendUpdateForm(@ModelAttribute Patient patientForm){
patientService.setUserData(patientForm);
return "patientHomePage";
}
@Override
public Patient setUserData(Patient patientForm) {
Patient patient = patientRepository.findByEmailAddress(patientForm.getEmailAddress());
patient.setGender(patientForm.getGender());
patient.setPsychicalActivity(patientForm.getPsychicalActivity());
patient.setAge(patientForm.getAge());
patient.setDietician(patientForm.getDietician());
return patientRepository.save(patient);
}
【问题讨论】:
标签: java jpa spring-data-jpa many-to-many cascade