我在书和作者之间有多对多的关系,我有 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时,两种方法都会加载书籍并且它是无限的(书籍->作者->书籍->作者-> ...) .