我在使用Spring Data JPA规范获取List实体Categories时遇到了问题。我需要得到所有类别与他们的食谱,其中Recipe.dateModified
更大,然后一些日期。我不知道如何创建我的 predicate ,这将填补Collection<Recipe>
在每个类别只有那些食谱,大于这个日期。
@Entity
public class Category {
private int id;
private String name;
@OneToMany(mappedBy = "categories")
private Collection<Recipe> recipes;
}
@Entity
public class Recipe {
private int id;
private String name;
private Timestamp dateModified;
}
在CategoryService
中,我使用规范获取List<Category>
:
@Service
public class CategoryService {
@Autowired
private CategoryRepository categoryRepository;
public List<Category> findAll(Date date) {
return categoryRepository.findAll(where(byDateModified(date)));
}
}
我会像这样写规范,但这不起作用。
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);
};
}
}
2条答案
按热度按时间w1e3prcc1#
在CategoryRepository Implementation类中,添加以下方法
MetaModel类在上面的代码中使用。如果没有生成Meta模型类,请在pom文件中添加此插件以自动生成元模型类。
h79rfbju2#
试试这个:
并确保您的实体Map正确: