У меня простые отношения между сущностями:
class Product {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
private String name;
private double calories;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn
private Category category;
}
class Category {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column(unique = true)
private String name;
Category(String name) {
this.name = name;
}
}
И я использую следующий репозиторий
interface ProductRepository extends Repository<Product, Long> {
Product save(Product product);
Page<Product> findAll(Pageable pageable);
Page<Product> findByCategory(Pageable pageable, Category category);
void delete(Product product);
}
Который вызывается в facade
, как это
public Page<ProductDTO> getProductsByCategory(Pageable pageable, String categoryName) {
return productRepository.findByCategory(pageable, dtoConverter.toCategory(categoryName))
.map(Product::toDTO);
}
и dtoConverter
Category toCategory(String categoryName) {
return new Category(categoryName);
}
Что в итоге приводит нас к Controller
@GetMapping("/findCategory")
Page<ProductDTO> getProductsByCategory(Pageable pageable, @RequestParam String categoryName) {
return productFacade.getProductsByCategory(pageable, categoryName);
}
У меня очень похожий способ получить и создать новые продукты,это работает, но как только я пытаюсь найти продукт по категории, как я описал выше, я получаю
{
"timestamp": "2018-11-30T22:57:29.660+0000",
"status": 404,
"error": "Not Found",
"message": "No message available",
"path": "/products/findCategory=fruit"
}
Даже если я уверен, что есть продукты этой категории, хранящиеся в БД (я считаю, что они смотрят прямов MySQL и с помощью конечной точки findAll).Кто-нибудь может объяснить мне, что здесь не так?