Я реализовал поведение мягкого удаления в своем воображаемом приложении для проката видео, и теперь я пытаюсь реализовать способ повторной активации моих «удаленных» клиентов, но я не могу заставить свой подход работать, конечно, что-то простое, но Google сделал не дай мне найти ответ, так что я здесь.
Вот выдержка из моего интерфейса репо (JpaRepository):
@Query("select m from Movie m where m.isDeleted = true")
List<Movie> findAllIsDeleted();
@Override
@Query("select m from Movie m where m.isDeleted=false")
List<Movie> findAll();
@Modifying
@Transactional
@Query("update Movie m set m.isDeleted=true where id=?1")
void softDelete(Long id);
В моем классе обслуживания у меня есть:
public List<Movie> findAllMovies(String filterText) {
if (filterText == null || filterText.isEmpty()) {
return movieRepository.findAll();
} else {
return movieRepository.search(filterText);
}
}
public List<Movie> findAllDeletedMovies() {
return movieRepository.findAllIsDeleted();
}
И отрывок из моего класса listview выглядит так:
...
Checkbox showDeleted = new Checkbox("Show deleted movies", e -> {
updateList();
Notification.show(e.getValue().toString());
});
...
private void updateList() {
if (showDeleted.getValue() == true) {
grid.setItems(service.findAllDeletedMovies());
}
grid.setItems(service.findAllMovies(filterText.getValue()));
}
Но очевидно, что в части слушателя что-то не так, или есть молчаливое «конечно, мы хотим помочь», о котором я не знаю. Потому что функция updateList не выполняется. Что я пропустил?




Я не знаю, что вы дизайн таблицы данных, но вы можете попробовать это
"выберите m.* из Movie m, где m.isDeleted = true"
всегда используйте средство форматирования и предоставляйте детали + вывод
Проблема заключается в реализации вашего updateList метода.
Независимо от того, истинно ли значение флажка, в конце он всегда снова устанавливает элементы, возвращаемые service::findAllMovies.
переместите последний оператор в блок else, и он должен работать.
private void updateList() {
if (showDeleted.getValue()) { // btw, if (boolValue == true) is redundant. just do if (boolValue)
grid.setItems(service.findAllDeletedMovies());
} else {
grid.setItems(service.findAllMovies(filterText.getValue()));
}
}
Спасибо, проблема не в запросе, а для справки, проблема в том, что метод updateList() не выполняется, когда я устанавливаю/снимаю флажок showDeleted....