Как найти книгу по категории? - PullRequest
0 голосов
/ 28 февраля 2019

У меня есть три класса:

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 (), который возвращает все книги по категориям.У меня есть отношения OneToMany между категорией и книгой.Категория как отдельная сущность.Я бы знал, как найти книгу, скажем, id (из Book.java), но я не знаю, как себя вести, когда у нас есть поле класса в качестве экземпляра другого объекта.

1 Ответ

0 голосов
/ 28 февраля 2019

Посмотрите на Выражения свойств

Есть несколько способов достичь того, чего вы пытаетесь достичь.Один из возможных:

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...