根据多对一关系标准选择 - Spring Data

时间:2017-05-09 23:19:40

标签: spring-data spring-data-jpa

对于以下实体,

public class Book {

    private String bookName;

    @OneToMany(mappedBy = "name", cascade = CascadeType.ALL)
    private List<Author> authors;

}

public class Author {

    private String name;
    private String location;

    @ManyToOne
    @JoinColumn(name = "bookName", referencedColumnName = "bookName")
    private Book book;

}

例如,如果我想检索作者位于美国的图书清单。

@Query("SELECT a from Book a, Author b where b.location = "USA")

但是,以下查询仅检索作者位于美国中的书籍,而不仅检索位置 USA <的作者 / strong>但作者也包含其他位置。

我如何只检索位于美国中的作者以及过滤掉非美国的作者 STRONG>。

2 个答案:

答案 0 :(得分:1)

更改添加联接的查询

@Query("SELECT a from Book a join a.authors b where b.location = "USA")

答案 1 :(得分:1)

首先,您的映射是 NOT 正确。

您必须在mappedBy课程中修复Book媒体资源。

图书课程:

public class Book {

    private String bookName;

    @OneToMany(mappedBy = "book", cascade = CascadeType.ALL)
    private List<Author> authors;

}

现在,您可以使用JPQL查询数据库,以获取Books及相关的Authors

BookRepository

中试试这个
@Query("SELECT b from Book b join fetch b.authors a where a.location = "USA")

PS :我没有测试过该查询但它应该可以运行。