Задать вопрос
silverhawk90
@silverhawk90
Серверный Java Developer

Как заполнить List по Spring Data JPA Specification для OneToMany Relationship?

У меня есть проблема с получением списка сущностей 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);
        };
    }

}
  • Вопрос задан
  • 1259 просмотров
Подписаться 4 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 1
@aol-nnov
не приходилось еще пользоваться этой черной магией, но как насчет
findAllByRecipesDateModifiedGreaterThan(Date date)? %)
docs.spring.io/spring-data/jpa/docs/current/refere...

обязательно расскажи, что вышло! )) интересно же )
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы