Получите данные, используя весенний репозиторий, когда отношение один ко многим - PullRequest
1 голос
/ 25 мая 2019

Итак, у меня есть два класса Movie и Жанры по отношению один ко многим. Я хочу получить список фильмов, отфильтрованных по названию жанра, с помощью репозиториев Spring. Я хочу быть в состоянии сделать что-то вроде:

List<Movie> movies = movieRepository.getMoviesByGenres(Arrays.asList("Drama", "Comedy"))

Я пытался сделать это, как показано ниже, но это не вок, есть ли возможность сделать это с помощью весеннего хранилища?

@Entity
public class Movie {

  @Id
  @Column(name = "movie_id")
  private long id;
  private String title;
  @OneToMany(mappedBy = "movie")
  private Set<Genres> genres;
  ...
} 

-

@Entity
public class Genres {

  @Id
  private long id;
  @ManyToOne
  @JoinColumn(name = "movie_id", nullable = false)
  private Movie movie;
  private String name;
  ...
}

-

public interface MovieRepository extends JpaRepository<Movie, Long>{

  List<Movie> getMoviesByGenres(String name);
}

1 Ответ

1 голос
/ 25 мая 2019

Вам необходимо создать метод, подобный приведенному ниже:

public interface MovieRepository extends JpaRepository<Movie, Long>{

  List<Movie> getMoviesByGenresNameIn(List<String> names);
}

И если вы хотите получить geners отношение с одним запросом, вам нужно украсить метод с помощью EntityGraph, как показано ниже:

@EntityGraph(attributePaths={"geners"})
List<Movie> getMoviesByGenresNameIn(List<String> names);
...