在制作患者資料時,我無法插入當前登錄用戶的 ID。我希望用戶能夠添加自己的患者,但問題是當我添加新患者時,id_user 列為空
我嘗試了很多方法,但無法將 id_user 添加到患者。我想念什么?
這是我的用戶物體:
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int idUser;
private String firstName;
private String lastName;
private String username;
...
@ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.PERSIST)
@JoinTable(name = "users_roles",
joinColumns = @JoinColumn(name = "id_user"),
inverseJoinColumns = @JoinColumn(name = "id_role"))
@JsonManagedReference
private Set<Role> roles = new HashSet<>();
@OneToMany(cascade = CascadeType.ALL, mappedBy = "user")
private List<Patient> patients = new ArrayList<>();
public void add(Patient patient) {
if (patient != null) {
if (patients == null) {
patients = new ArrayList<>();
}
patients.add(patient);
patient.setUser(this);
}
}
患者物體:
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id_patient")
private int idPatient;
@Column(name = "first_name")
private String firstName;
@Column(name = "last_name")
private String lastName;
...
@ManyToOne
@JoinColumn(name = "user_id", nullable = false)
private User user;
}
控制器
@RequestMapping("/addPatient")
public String addPatient(Model theModel, HttpServletRequest request) {
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
UserDetails userD = (UserDetails) auth.getPrincipal();
User u = userService.findByUsername(userD.getUsername());
request.getSession().setAttribute("id_user", u.getIdUser());
// int userId = user.getIdUser();
int userId = (int) request.getSession().getAttribute("id_user");
User user = new User();
user.setIdUser(userId);
Patient patient = new Patient();
patient.setUser(user);
theModel.addAttribute("patient", patient);
return "user/patients/add-patient-dashboard";
}
@PostMapping("savePatient")
public String savePatient(@ModelAttribute("patient") Patient thePatient, Model model) {
patientService.save(thePatient);
return "redirect:/user/allPatients";
}
我嘗試從以下位置編輯用戶服務:
@Override
public void save(User user) {
user.setPassword(bCryptPasswordEncoder.encode(user.getPassword()));
userRepository.save(user);
}
到:
@Override
public void save(User user) {
List<Patient> patients = user.getPatients();
patients.forEach(patient -> user.add(patient));
user.setPassword(bCryptPasswordEncoder.encode(user.getPassword()));
userRepository.save(user);
}
如果有人可以幫助我解決這個問題,我將不勝感激,因為我為此苦苦掙扎了很長時間

uj5u.com熱心網友回復:
感謝 M Denium,我終于解決了這個問題。我已將整個代碼從方法addUser移到saveUser:
@RequestMapping("/addPatient")
public String addPatient(Model theModel) {
Patient patient = new Patient();
theModel.addAttribute("patient", patient);
return "user/patients/add-patient-dashboard";
}
@PostMapping("savePatient")
public String savePatient(@ModelAttribute("patient") Patient thePatient, Model model, HttpServletRequest request) {
patientService.save(thePatient);
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
UserDetails userD = (UserDetails) auth.getPrincipal();
User u = userService.findByUsername(userD.getUsername());
request.getSession().setAttribute("id_user", u.getIdUser());
int userId = (int) request.getSession().getAttribute("id_user");
User user = userService.findById(userId);
thePatient.setUser(user);
patientService.save(thePatient);
return "redirect:/user/allPatients";
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/480427.html
上一篇:SpringBootGET方法回傳具有StackOverFlow錯誤的重復值
下一篇:我無法參考配接器
