2

我在书和作者之间有多对多的关系,我有 3 个表:作者、书和 author_book。

@Entity()
@Table(name = "author")
@NamedEntityGraph(name = "Book.detail", attributeNodes = @NamedAttributeNode("books"))
@Getter
@Setter
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class Author {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    private String name;

    @ManyToMany
    @JoinTable(
            name = "author_book",
            joinColumns = @JoinColumn(name = "author_id"),
            inverseJoinColumns = @JoinColumn(name = "book_id")
    )
    private List<Book> books;
}

@Entity()
@Table(name = "book")
@Getter
@Setter
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class Book {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    private String name;

    @ManyToMany(mappedBy = "books")
    private List<Author> authors;

}

使用存储库:

 public interface AuthorRepository extends JpaRepository<Author, Long>{
        @EntityGraph(value = "Book.detail", type = EntityGraphType.LOAD)
        Author getGraphById(Long id);

        Author getById(Long id);
    }

public interface BookRepository extends JpaRepository<Book, Long>{

}

在 AuthorRepository 中,我有 2 种方法:getGraphById()用作者加载书籍,getById()不加载书籍。

问题是当使用@test标签(jUnit测试)时,一切都按预期工作,但是当我通过邮递员调用api时,两种方法都会加载书籍并且它是无限的(书籍->作者->书籍->作者-> ...) .

4

0 回答 0