Spring DataJPA@ManyToOne单向N+1问题



已经有一段时间没有玩Hibernate的@OneToMany和@ManytoOne了。让我们举下面的例子。我们有一本叫page的书。我只对页面内容(以及页面内的书籍详细信息(感兴趣

页码:

@Entity
@Table(name = "page")
public class Page {
@Id
@Column
private String id;
@ManyToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(name = "book_id", nullable = false)
private Book book;
}

书籍:

@Entity
@Table(name = "book")
public class Book {
@Id
@Column
private String book_id;
@Column
private String details;
}

然后我需要提取所有页面,使用spring数据;

pageRepo.findAll();

它有效,但我遇到了N+1问题。选择N+1。有没有办法解决这个问题,但保持这种关系的单向性?

您应该在Crud/Jpa存储库中创建一个QUERY,在其中显式地使用Page和Book 之间的JOIN

类似这样的东西:

public interface PageRepository extends JpaRepository<Page, String> {
@Query("SELECT * FROM Page p JOIN Book b ON p.book_id = b.id")
List<Page> findAll();
}

最新更新