列表中的Spring数据查询列表

时间:2018-08-12 20:19:21

标签: mysql sql spring-boot spring-data

我有以下型号

Title.java

public class Title {
    private short id;
    private String name;
    private List<TitleGenre> titleGenres;
}

TitleGenre.java

public class TitleGenre {
    private Title title;
    private Genre genre;
}

Genre.java

public class Genre {
    private short id;
    private String name;
    private List<TitleGenre> titleGenres;
}

在我的TitleRepository中,我有以下方法:

@Query("SELECT t FROM Title t LEFT JOIN t.titleGenres tg WHERE (?1) IN (tg.genre.name)")
Page<Title> findByTitleGenres_nameIn(@Param("genres") List<String> s, Pageable pageable);  

我只想传递两个或多个流派作为参数来发送网址并获得具有这些流派的标题。

这是Controller方法

@GetMapping(value= "titles", produces = MediaTypes.HAL_JSON_VALUE)
public ResponseEntity<?> getByGenres(@RequestParam(name = "genre") List<String> genre, Pageable pageable) {
    Page<Title> titles = this.titleService.findByTitleGenres_nameIn(genre, pageable);
    return ResponseEntity.ok(pagedAssembler.toResource(titles, this.titleResourceAssembler));
}  

当我仅通过一种流派时,它就可以正常工作

http://localhost:8080/titles?genre=adventure

但是,如果我传递两个或多个参数(属于给定所有流派的标题),例如:

http://localhost:8080/titles?genre=adventure&genre=drama

http://localhost:8080/titles?genre=adventure,drama

我收到以下错误

java.sql.SQLException: Operand should contain 2 column(s)  

我使用JPA命名方法尝试了页面findDistinctByTitleGenres_genre_nameIn(@Param("genres") List<String> s, Pageable pageable);

没有给我任何错误,但是当我通过两种类型时,如果给出两种或两种类型中的一种,则返回结果,就像第一种类型 OR 第二种类型一样,我想要第一种类型< strong> AND 第二种类型

0 个答案:

没有答案