액터와 동영상의 두 엔티티가 있습니다. 이 두 개체 사이에는 ManyToMany 관계가 있습니다 (Actor는 둘 이상의 Movie에 참여할 수 있고 Movie에서는 둘 이상의 Actor를 볼 수 있기 때문에). 내 Spring Data Rest API에는 다음과 같은 끝 점이 있습니다.스프링 데이터 나머지 ManyToMany 관계로 새 항목 게시
http://host:port/movies
http://host:port/actors
이제 영화 페이지에서 새 액터를 만들겠습니까? 내 고객은 배우 정보와 영화와의 관계가 포함 된 (단일) POST 요청을 제출합니다. 나는 다음 (ID 1 영화에 대한 새로운 배우)와 같은 뭔가 시도 :
{
"name": "Leonardo Di Caprio",
"movies": [ "http://host:port/movies/1" ]
}
봄 API가 만든 (201)로 응답, 그래서 형식과 영화 URI는 정상입니다. 액터에 대해 API 또는 DB를 쿼리 할 때 액터가 생성되었지만 관계가 존재하지 않음을 발견했습니다.
Spring 데이터 나머지가있는 ManyToMany 관계에 대해 두 가지 요청 (액터를 만들려면 하나는 관계를 만들려면 하나)을해야한다는 것을 이미 알고 있습니다. OneToMany/ManyToOne 또는 OneToOne 관계에 대한처럼 (하나의 요청을 모두 만들 수있는 방법이 있다면 내가 여기 부탁 해요.
Actor 클래스
@Entity
public class Actor {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
private String name;
@ManyToMany(mappedBy = "actors")
private List<Movie> movies;
public long getId() {
return id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<Movie> getMovies() {
return movies;
}
public void setMovies(List<Movie> movies) {
this.movies = movies;
}
}
영화 등급
@Entity
public class Movie {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
protected long id;
protected String title;
@ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH})
protected List<Actor> actors;
public long getId() {
return id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public List<Actor> getActors() {
return actors;
}
public void setActors(List<Actor> actors) {
this.actors = actors;
}
}
들어 두 엔티티 모두 표준 저장소가 있습니다.
@Repository
public interface ActorRepository extends PagingAndSortingRepository<Actor, Long> {
}
UPDATE
JPA에서 ManyToMany 관계를 처리하는 방식으로 인해 문제가 발생했습니다. 이 thread에는 JPA 및 REST와의 양방향 연관을 처리하는 방법에 대한 영리한 설명이 있습니다.
나는이 두 가지 옵션 중 하나를 사용하여 내 문제를 해결할 수:
- 두 POST 요청의
에 새로운 배우를 유지하는http://host:port/actors
에, 하나를 수행
http://host:port/movies/{id}/actors
새 액터와 동영상 간의 연결을 유지합니다.
B -
http://host:port/actors
에 하나 개의 POST 요청을하는 (내가 질문의 시작 부분에 설명 된대로)하지만 액터 클래스의 setMovies 방법을 수정 (I 인용 스레드에 설명 된대로) .
관련 영화를 게시하는 이상한 방법입니다. 나머지 컨트롤러의 메서드 메서드는 어떻게 생겼습니까? – ChiefTwoPencils
관련 동영상을 하나만 올리겠습니다. 영화 페이지에서는보고있는 영화에 배우를 추가 할 수 있으므로 한 가지 요청 만하는 것이 가장 좋은 방법이라고 생각했습니다. 두 가지 요청 (새 액터에 대한 요청과 무비와 액터 간의 새로운 관계에 대한 요청)을 보낼지 더 나은 선택이 될 것입니다. – Francesco
답변이없는 좋은 질문 :/ – EralpB