使用 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);
我已经在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);