java JPA规范:筛选子实体
我成功地为我的应用程序的实体实现了软删除(也称为删除标志)。然而,我还有一个问题。 我已经用findAll和count方法编写了一个定制的JPARepository,它可以过滤掉被删除的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子列表,则不会筛选该列表,因为查询不是由其存储库运行的
我的问题:我是否可以修改上述规范,以便过滤掉软删除的子项? 另一种方法是使用反射(在查询后手动)过滤child,但这不会起作用
# 1 楼答案
使用Hibernate,您可以在实体上使用
@Where
注释也就是说,看一下
@SQLDelete
以获得软删除实现的替代方案# 2 楼答案
我让它工作了。如果每个产品都有一个子实体类别,即类别是产品的子实体,则以下代码适用于我