RequestMapping与hibernate OneToMany如何以正确的方式插入外键

时间:2015-10-19 10:59:11

标签: java mysql spring hibernate

所以我对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。任何想法都是我能做到的。

1 个答案:

答案 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

我知道这有点乱,但我也在寻找更好的方法,如果我找到更好的解决方案,我会发布答案。