我几乎整天都在寻找答案,却不知道如何解决这个问题。所以这就是为什么我问,请建议。
我得到了两个实体,patient和dietician—它们都存储在一个名为users的表中—我有一个名为user的父实体,patient/dietician从中继承。
我想做的是,我有一个关于哪个病人可以更新关于他自己的信息的视图(他必须说,他是什么年龄,身高,体重,他想要什么类型的饮食,他可以从下拉列表中选择营养师(那些营养师已经存在于数据库表中)我现在想做的是用这些信息保存病人,但每次我保存它是保存这些信息,但也创建新的营养师条目(复制它)或声明,他不能创建营养师,因为emailaddress字段是唯一的(这就是我想要的)。为什么每次我保存它都会为多人关系创建一个新条目?为什么不能使用现有的营养师,只需将fk(营养师id)设置为现有营养师的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);
}
1条答案
按热度按时间13z8s7eq1#
设置患者的营养师时,请确保使用的是从存储库加载的示例,而不是新创建的示例。
所以呢
patient.setDietician(patientForm.getDietician());
应该改成