2017-10-17 20 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); 
} 

をthe MovieService:

@Override 
public Movie createMovie(Movie movie) { 
    return movieRepository.save(movie); 
} 

ムービーをムービーテーブルに問題なく追加できますが、どうすればできますか結合テーブルにレコードを作成しますか?

答えて

0

あなたの場合、ユーザーは関係の所有者なので、ユーザーオブジェクトにムービーを追加してユーザーをデータベースに保存する必要があります。 SOに関するよくある質問がたくさんあります。たとえば、@ManyToMany relation not save

編集: Movieの代わりにUserオブジェクトを保存する必要があります。ムービーをユーザーに追加し、ユーザーをデータベースに格納します。ムービーを追加するユーザーを見つけるには、userIdをcontrollerに渡す必要があります。

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

関係を構築する方法の例はたくさんありますが、実際にオブジェクトを保存するには、サービスまたはコントローラ内のコードの例を見つけることができません。 –

関連する問題