我有三节课:
BookController.java
@Controller
public class BookController {
@Autowired
private BookRepository book_repository;
@Autowired
private CategoryRepository category_repository;
@Autowired
private BookServiceImpl bookServiceImpl;
@RequestMapping(value = "/booklist")
public String bookList(Model model) {
model.addAttribute("books", book_repository.findAll());
return "booklist";
}
@RequestMapping(value = "/findbycategory")
public List<Book> findBookByCategory()..... (need to implement)
}
Book.java
@Entity
public class Book {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
private String title;
private String author;
private int year = 1600;
private String isbn;
private double price;
@ManyToOne
@JsonIgnore
@JoinColumn(name = "categoryId")
private Category category;
setters/getters/constructors...
}
Category.java
@Entity
public class Category {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long categoryId;
private String categoryName;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "category")
private List<Book> books;
...
}
BookRepository.java
@RepositoryRestResource
public interface BookRepository extends CrudRepository<Book, Long> {
List<Book> findByAuthor(@Param("author") String author);
List<Book> findByTitleLike(String title);
}
我想编写一个findBooksByCategory()方法,该方法按类别返回所有书籍。我在Category和Book之间有OneToMany关系。类别是作为单独的实体。我会知道如何通过说id(来自Book.java)来查找书,但是当我们将类字段作为其他对象的实例时,我不知道如何表现。
答案 0 :(得分:1)
有多种方法可以实现您要实现的目标。可能的一种是;
List<Book> findAllByCategory(Category category);
由@Compass建议
如果您想更具体一些,例如通过类别名称,您可以;
List<Book> findAllByCategoryCategoryName(String categoryName);
或
List<Book> findAllByCategory_CategoryName(String categoryName);
然后有一种本机的方法[假设表名和列];
@Query(value="select b.* from book b inner join category c on b.category = c.id where c.name = ?1", nativeQuery=true)
List<Book> customQueryToFindListOfBooks(String categoryName);