所以我对hibernate的理解有些麻烦。
所以我创建了一个带弹簧安全性的简单弹簧应用程序。当用户登录时,我使用Principal在登录前检查用户是否存在于数据库中。所以我不能做User globaluser = user;
@RequestMapping("/user")
public Principal user(@AuthenticationPrincipal Principal user) {
System.out.println(user.getName());
System.out.println(user.toString());
return user;
}
我有一个User类,我创建了一对多的关系。但是当插入数据库时,fk_id_user为空
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id_user")
private Integer id;
@OneToMany(cascade = CascadeType.ALL)
@JoinColumn(name = "fk_id_user", nullable = false)
private List<Client> clientList = new ArrayList<>();
@Column(unique = true)
private String email;
// + getters and setters
然后我有客户端控制器:
@RestController
@RequestMapping("/api")
public class ClientController {
@Autowired
private ClientDao clientDao;
private static final Logger LOGGER = LoggerFactory.getLogger(UserController.class);
@RequestMapping(value = "/addclient",method = RequestMethod.POST)
public void addClient(@RequestBody Client client) {
LOGGER.info("Received request to create the {}", client);
LOGGER.info("client saved");
clientDao.save(client);
}
}
对于dao我正在使用jpa存储库的
所以问题是如何根据登录的用户插入fk_id_user
。任何想法都是我能做到的。
答案 0 :(得分:0)
我不知道这是否是最好的方法。所以在我弄明白之前我不会接受我的回答:
但这就是我解决它的方式:
我在课堂上添加了private User globalUser;
。
然后我创建一个请求映射,以便为用户设置我从原则用户那里获得的数据
@RequestMapping(value = "/setuser")
public void setuser(@RequestBody String email) {
globalUser = userDao.findByEmail(email);
LOGGER.info(globalUser.getId().toString());
LOGGER.info(globalUser.getEmail());
}
现在我从数据库中获得了用户并立即将其发送回前端。
@RequestMapping(value = "/getuser")
public Map<String,Object> getuser() {
LOGGER.info(globalUser.getId().toString());
LOGGER.info(globalUser.getEmail());
Map<String,Object> model = new HashMap<String,Object>();
model.put("id", globalUser.getId().toString());
model.put("email", globalUser.getEmail());
return model;
}
然后在将客户端提交到数据库之前,我手动设置id。所以我完全忽略了我可能错误的@OneToMany
。
我知道这有点乱,但我也在寻找更好的方法,如果我找到更好的解决方案,我会发布答案。