3
我成功地为我的应用程序的实体实施了软删除(又名删除标志)。但是,我还有一个问题。 我已经用findAll和count方法编写了一个自定义的JPARepository,用于过滤掉已删除的方法。我这样做与规格:JPA规范:筛选子实体
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));
}
};
如果实体有例如,它们也软删除实体的一对多子列表,没有被过滤此列表,因为查询不被其运行的仓库。
我的问题:我可以修改上面的规范,以便软删除的孩子被过滤掉吗? 另一种方法是使用反射筛选孩子(在查询后手动筛选),但那不会是高性能的。
我们已经尝试过。额外的where子句被添加到在实体本身上执行的查询中,查询在父类中通过预先获取执行,而不是使用延迟获取的查询。 附注:我们试图避免Hybernate特定的命令,因为我们不需要任何直接的依赖关系。这就是为什么我建立了一个定制的软删除解决方案,而不是使用where子句。 虽然where子句是个好主意。 – 2015-01-21 12:24:37