У меня есть проблема с получением списка сущностей Category используя Spring data JPA specifications. Мне нужно получить все категории со своими Рецептами, где Recipe.dateModified больше какой-то даты. Я не знаю, как создать свой Predicate, который бы заполнил Collection в каждой категории только теми рецептами у которых dateModified больше какой-то даты.
@Entity
public class Category {
private int id;
private String name;
@OneToMany(mappedBy = "category")
private Collection<Recipe> recipes;
}
@Entity
public class Recipe {
private int id;
private String name;
@ManyToOne
@JoinColumn(name = "category_id", referencedColumnName = "id")
private Category category;
@Temporal(TemporalType.TIMESTAMP)
private Date dateModified = new Date();
}
В CategoryService я получаю List используя Specification:
@Service
public class CategoryService {
@Autowired
private CategoryRepository categoryRepository;
public List<Category> findAll(Date date) {
return categoryRepository.findAll(where(byDateModified(date)));
}
}
Я пытался использовать такую Specification, но это не работает:
public class RecipeSpec {
public static Specification<Category> byDateModified(Date date) {
return (root, query, builder) -> {
final Join<Category, Recipe> recipe = root.join(Category_.recipes, JoinType.LEFT);
return builder.greaterThan(recipe.get(Recipe_.dateModified), date);
};
}
}