我有2个模特:用户和电影。我使用:
在它们之间配置了ManyToMany关系Movie.java(模特):
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(
name = "movie_user",
joinColumns = @JoinColumn(
name = "movie_id",
referencedColumnName = "id"
),
inverseJoinColumns = @JoinColumn(
name = "user_id",
referencedColumnName = "id"
)
)
添加电影时,我会在MovieController中捕获它:
@RequestMapping(value = "/", method = RequestMethod.POST)
public Movie createMovie(@RequestBody Movie movie){
return movieService.createMovie(movie);
}
在MovieService中:
@Override
public Movie createMovie(Movie movie) {
return movieRepository.save(movie);
}
我可以毫无问题地将电影添加到电影表中,但如何在连接表中创建记录?
答案 0 :(得分:0)
在您的情况下,用户是关系的所有者,因此您必须将电影添加到用户对象并将用户存储在数据库中。 SO上有很多类似的问题 - 例如:@ManyToMany relation not save
编辑: 您必须保存用户对象而不是电影。将电影添加到用户并将用户存储在数据库中。您必须将userId传递给控制器才能找到要添加电影的用户。
创建DTO:
public class UserMovieDTO {
private Movie movie;
private Integer userId;
}
然后将您的控制器和服务更改为:
@RequestMapping(value = "/", method = RequestMethod.POST)
public Movie createMovie(@RequestBody UserMovieDTO dto){
return movieService.createMovie(dto);
}
@Override
public Movie createMovie(UserMovieDTO dto) {
User user = userRepository.findBydId(dto.getUserId());
user.getMovies().add(dto.getMovie());
userRepository.save(user);
}
但是你应该将你的函数名改为:addMovieToUser或类似的东西。