Хорошо, ответ на этот вопрос может быть в весенних документах здесь или здесь , но я не смог его найти.Я пытаюсь реализовать soft-delete.и до сих пор все работает отлично и денди.За исключением случаев, когда я получаю записи по ассоциации.
пример: http://localhost:8080/api/accounts
возвращает правильный список учетных записей (без отображения учетных записей, где is_deleted = true)
и http://localhost:8080/api/addresses
возвращает надлежащий списокадреса (без указания адресов, где is_deleted = true
)
, но когда я нажимаю http://localhost:8080/api/accounts/3c84cdb1-6a01-4364-a60b-305afc521440/addresses
, я получаю список всех адресов.даже те, где is_deleted = true
, вот мой пользовательский baseRepository:
@NoRepositoryBean
public interface BaseRepository<T extends BaseEntity, ID> extends JpaRepository<T,ID>{
void obliterateEntity(T entity);
@Override
@Transactional(readOnly = true)
@Query("select e from #{#entityName} e where e.isDeleted = false")
Page<T> findAll(Pageable pageable);
@Override
@Transactional(readOnly = true)
@RestResource(exported=false)
@Query("select e from #{#entityName} e where e.isDeleted = false")
List<T> findAll(Sort var1);
@Override
@Transactional(readOnly = true)
@RestResource(exported=false)
@Query("select e from #{#entityName} e where e.isDeleted = false")
List<T> findAllById(Iterable<ID> var1);
@Override
@Transactional(readOnly = true)
@RestResource(exported=false)
@Query("select e from #{#entityName} e where e.isDeleted = false")
List<T> findAll();
@Override
@Transactional(readOnly = true)
@RestResource(exported=false)
@Query("select e from #{#entityName} e where e.isDeleted = false and e.id = ?1")
Optional<T> findById(ID var1);
@Query("update #{#entityName} e set e.isDeleted=true where e.id = ?1")
@Transactional
@Modifying
void delete(UUID id);
@Override
@Transactional
default void delete(T entity) {
delete(entity.getId());
}
}
ВОПРОС: Какой метод (ы) мне нужно переопределить для фильтрацииудаленные записи при получении через ссылки на ассоциации?
ps Я также попытался сделать это вместо переопределения функций:
@SQLDelete(sql =
"UPDATE address " +
"SET is_deleted = true " +
"WHERE id = ?")
@Loader(namedQuery = "findAddressById")
@NamedQuery(name= "findAddressById", query =
"SELECT add " +
"FROM Address add " +
"WHERE " +
"add.id = ?1 AND " +
"add.isDeleted = false")
@Where(clause = "is_deleted = false")
public class Address extends BaseEntity {
, но для этого требуется то же самое сделать в каждой отдельной сущности.У этого также есть другие проблемы реализации.
Полагаю, у меня просто проблемы с мягким удалением.Таким образом, любые дополнительные советы будут оценены.