Let's say I have a book entity and a library entity (one library can have multiple books, but each book belongs to only one library). They are defined as follows:
public class Library { @Id private Long id; @OneToMany(mappedBy = "library") private List<Book> books = new ArrayList<>(); } and
public class Book { @Id private Long id; @ManyToOne @JoinColumn(name="FK_Library", nullable=false) private Library library; } I want to find all books which belong to a particular library. One way is to create a LibraryRepository as follows:
public interface LibraryRepository extends JpaRepository<Library, Long>{} Now I have findById(Long libraryId) method that returns a Library object with a List<Book> in it.
I was wondering if it is possible to create a BookRepository and declare a method named findByLibraryId(Long libraryId) and let hibernate query the Book table by the foreign key FK_Library, without performing any joins.
Something like this:
public interface BookRepository extends JpaRepository<Book, Long> { public List<Book> findByLibraryId(Long libraryId); } The above method findByLibraryId does perform join. I do not want it to perform a join, since all I want is find all rows which have library_id defined by foreign key relationship.
Also is the first method more preferable then second one?
findByIdmethod ofLibraryRepositoryit returnsLibraryobject withList<Book>, but it does not perform join when I see the hibernate generated query. How is this possible?