在 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";
}