我成功地为我的应用程序的实体实现了一个软删除(也就是删除标记)。但是,我还有一个问题。 我已经用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子列表,则不会过滤此列表,因为查询不是由其存储库运行。
我的问题:我可以修改上面的规范,以便过滤掉软删除的孩子吗? 另一种方法是使用反射过滤子项(在查询后手动过滤),但这样做不会有效。
答案 0 :(得分:0)
使用Hibernate,您可以在实体上使用@Where
注释
@Entity
@Where(clause = "deleted = 0")
public class MyEntity {
...
尽管如此,请查看@SQLDelete
以获取软删除实现的替代方法。
答案 1 :(得分:0)
我已经开始工作了。如果每个产品都有一个子实体类别,即“类别”是“产品”的子实体,则以下代码对我有效
const getStepContent = step => {
const allSteps = [
<Profile
index={index}
form={form}
stepperState={stepperState}
onUpdateStepperState={handleUpdateStepper}
/>,
<Step1 />,
<Step2 />,
<Step3 />
];
return (
<>
{allSteps.map(
(stepCmp, index) => {
return <div hidden={index !== step}>{stepCmp}</dv>
})
}
</>
);
}