2017-10-17 77 views
0

我有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

就你而言,用戶是關係的所有者,因此你必須將電影添加到用戶對象並將用戶存儲在數據庫中。 SO上有很多類似的問題 - 例如:@ManyToMany relation not save

編輯: 您必須保存User對象而不是Movie。將影片添加到用戶並將用戶存儲在數據庫中。您必須將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或類似這樣的東西。

+0

我可以找到很多關於如何建立關係的例子,但是我找不到任何代碼應該在服務或控制器中實際保存對象的例子。 –