Я успешно реализовал мягкое удаление (как флаг удаления) для объектов моих приложений. Однако у меня есть одна проблема. Я написал собственный JPARepository с методами findAll и count, которые отфильтровывают удаленные. Я делаю это со спецификацией: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));
}
};
Если предприятие имеет, например, OneToMany списка дочерних объектов, которые также мягкие удалены, этот список не фильтруется, поскольку запрос не выполняется его хранилище.
Мой вопрос: могу ли я изменить приведенную выше спецификацию, чтобы дети, которые были мягко удалены, были отфильтрованы? Альтернативой будет фильтрация дочерних элементов с отражением (вручную после запроса), но это не будет выполнено.
Мы пробовали это. Добавочное предложение where добавляется к запросам, выполняемым самим объектом, запросы, выполняемые родителями с нетерпением, но не запросы с ленивым набором. На стороне примечания: мы пытаемся избежать команд, связанных с Hybernate, потому что мы не хотим никакой прямой зависимости. Вот почему я создал специальное решение для мягкого удаления вместо использования предложения where. Предложение where - хорошая идея. –