当一对多关系时,使用Spring存储库获取数据

时间:2019-05-25 13:39:08

标签: java hibernate spring-boot spring-data-jpa one-to-many

所以我有两个类别的电影和流派一对一关系。我想做的是使用Spring存储库按类型名称过滤电影列表。 我希望能够执行以下操作:

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

我很想像下面那样做,但这不是很麻烦,是否有选择使用spring仓库来做到这一点?

@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 个答案:

答案 0 :(得分:1)

您需要创建一个如下所示的方法:

public interface MovieRepository extends JpaRepository<Movie, Long>{

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

如果您想通过一个查询获取geners关系,则需要使用EntityGraph装饰该方法,如下所示:

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