使用 spring boot jpa 中引用的 table 的外键查找所有数据

Find all data using foreign key from referenced table in spring boot jpa

我已经在Book & 相应的Pages 之间做了jpa 一对多映射如下。

@Entity
@Getter
@Setter
@NoArgsConstructor
@EqualsAndHashCode(onlyExplicitlyIncluded = true)
public class Book {
    @Id
    @EqualsAndHashCode.Include
    @Column(name = "book_id")
    private String bookId;

    private String name;

    @OneToMany(targetEntity = Page.class, cascade= CascadeType.ALL, orphanRemoval = true)
    @JoinColumn(name = "book_id_fk", referencedColumnName = "book_id")
    private List<Page> pages;
}

@Entity
@Getter
@Setter
@NoArgsConstructor
public class Page {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer sno;

    private Integer number;
}

@Repository
public interface PageRepository extends JpaRepository<Page, Integer> {
    List<Page> findAllByBook_Id(String bookId);
}

现在我想使用页面 table 中的图书 ID 获取所有页面。为此,我正在使用 findAllBook_id 方法,但我得到了 No property book found for type Page! 异常。我尝试了 XXXBook_fkId/XXXBookFkId/XXXBook_fk_id 等方法名称,但没有成功。请帮助

您面临的问题是您的 entity Page 没有与 Book 相关的字段。所以你在 JPA 层中有单向映射

一个解决方案是包含以下自定义查询,它将 return 您所期望的 returned。

 @Query( "SELECT pg FROM Book bk join bk.pages pg WHERE bk.bookId = :bookId")
 List<Page> findPagesByBookId(@Param("bookId") String bookId);