假设我有一个图书实体和一个图书馆实体(一个图书馆可以有多本书,但每本书只属于一个图书馆)。它们的定义如下:
public class Library
{
@Id
private Long id;
@OneToMany(mappedBy = "library")
private List<Book> books = new ArrayList<>();
}
和public class Book
{
@Id
private Long id;
@ManyToOne
@JoinColumn(name="FK_Library", nullable=false)
private Library library;
}
我想找到属于特定图书馆的所有书籍。一种方法是创建一个 LibraryRepository
如下:public interface LibraryRepository extends JpaRepository<Library, Long>{}
现在我有 findById(Long libraryId)
返回 Library
的方法带有 List<Book>
的对象在里面。我想知道是否可以创建一个
BookRepository
并声明一个名为 findByLibraryId(Long libraryId)
的方法并让 hibernate 查询 Book
外键表FK_Library
, 不执行任何连接 .像这样的东西:
public interface BookRepository extends JpaRepository<Book, Long> {
public List<Book> findByLibraryId(Long libraryId);
}
以上方法findByLibraryId
确实执行加入。我不希望它执行连接,因为我想要的只是找到所有具有 library_id
的行由外键关系定义。第一种方法比第二种方法更可取吗?
最佳答案
您可以使用 @Query
使用 JPQL 来做到这一点
@Query("SELECT b FROM Book b WHERE b.library.id = :libraryId")
public List<Book> findByLibraryId(Long libraryId);
关于java - 在 hibernate 中查询一对多映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63338868/