I have a User table and a UserInfo table which keeps the personal information of the user. What I am trying to do is adding personel information after log in. There is OneToOne relationship between tables with userId column so I defined it like this :
UserInfo class :
public class UserInfo {
//...
@OneToOne
@JoinColumn(name="user_id")
private User user;
// ...
}
User class :
 public class User implements UserDetails {
// ...
 @OneToOne(mappedBy="user", cascade = CascadeType.ALL, fetch=FetchType.LAZY,optional=true)
 private UserInfo userInfo;
 ...
}
After I log in, I want to add some user information to the db for current user. But I don't know how can i save user information in controller? Should I save User object like below? I've searched about it and there is a way to get current user's information:
(User)SecurityContextHolder.getContext().getAuthentication().getPrincipal();
But when I try to use it in the controller it just returns null. How can I do such operations (adding pers. info) for logged in user?
@RequestMapping(value = "/show", method = RequestMethod.POST)
public ModelAndView newUser(ModelMap model, Principal principal) {
    ModelAndView result = new ModelAndView("home");
    User user = (User)SecurityContextHolder.getContext().getAuthentication().getPrincipal();
    UserInfo userinfo = new UserInfo();
    userinfo.setPlacesVisit(userinfo.getPlacesVisit());
    user.setUserInfo(userinfo);
    userService.save(user);
    String message = "Userinfo was successfully added.";
    result.addObject("message", message);
    return result;
}