在 Spring Boot 中将用户 ID 插入患者
Insert users id to the patient in Spring Boot
制作患者数据时无法插入当前登录用户的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);
}
如果有人能帮我解决这个问题,我将不胜感激,因为我为此苦苦挣扎了很长时间
感谢 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";
}
制作患者数据时无法插入当前登录用户的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);
}
如果有人能帮我解决这个问题,我将不胜感激,因为我为此苦苦挣扎了很长时间
感谢 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";
}