Cách viết Query find Book by Category?

Giả sử mình có 2 table là: Book và Category ,

  • mình sử dụng Spring Data JPA .
  • mình muốn lấy list book theo category và view lên Thymeleaf dạng menu thì phải viết Query như thế nào… dưới là cách của mình nhưng ko in ra data.

Book

 @Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String name;
private String description;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "categoryid")
private Category category;

Category

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;

@NotEmpty(message="Thể loại không được trống")
private String name;

@NotEmpty(message="Mã không được trống")
private String code;

@OneToMany(mappedBy = "category")
private List<Book> books = new ArrayList<>();

BookRepo

@Query(value = "SELECT b.* FROM book b INNER JOIN category c on b.name = c.id WHERE c.id = ?1", nativeQuery = true)
List<Book> findBookByCategory(Integer categoryId);

Controller

@GetMapping("/{category}")
public String getBookByProduct(@PathVariable("category") Integer category, Model model, HttpSession session) {
	List<Book> bookList = bookService.findBookByCategory(category);
	
	if(bookList == null) {
		session.setAttribute("message", new MessageResponse("Không có Sách","danger"));
	}
	for(Book book : bookList ) {
		System.out.println(book.toString());
	}
	model.addAttribute("category", bookList);
	return "home/category";
}

View

<h4 class="text-uppercase font-weight-bold mb-3">Thể Loại</h4>
              <div class="mt-2 mb-2 pl-2 ">
                <div class="custom-control" th:each="category : ${category}" th:value="${category.id}">
                	<h5>
                		<a class="btn btn-info popovers" th:href="@{'/category/' + ${category.id}}"  >[[${category.name}]]</a>
                	</h5>
                </div>
     </div>

phần view danh sách Category đã có nhưng ko hiện Book

thks mn đã giúp

Bạn join book và category với điều kiện join b.name = c.id thì sao mà ra

4 Likes

à ra rồi. tks bạn. …

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?