【发布时间】:2015-01-21 12:01:37
【问题描述】:
我成功地为我的应用程序实体实现了软删除(又名删除标志)。但是,我还有一个问题。 我用 findAll 和 count 方法编写了一个自定义 JPARepository 过滤掉已删除的方法。我按照规范执行此操作:
softDeleteSpecification = new Specification<T>() {
@Override
public Predicate toPredicate(Root<T> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
return cb.or(cb.isNull(root.get(DELETED_FIELD_NAME)), cb.equal(root.<T>get(DELETED_FIELD_NAME), false));
}
};
例如,如果实体具有同样被软删除的实体的 OneToMany 子列表,则不会过滤此列表,因为查询不是由其存储库运行的。
我的问题:我可以修改上面的规范,以便过滤掉软删除的孩子吗? 另一种方法是使用反射过滤子项(在查询之后手动),但这不会是高效的。
【问题讨论】:
标签: java hibernate jpa soft-delete