我已经在我想象中的视频租赁应用程序中实现了软删除行为,现在我正在尝试实现一种方法来重新激活我的"删除";客户,但我无法找到我的工作方法,当然是一些简单的事情,但谷歌没有让我找到答案,所以我来了。
以下是我的回购界面(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函数没有执行。我错过了什么?
问题在于updateList
方法的实现。
无论复选框的值是否为true,最后它总是再次设置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()));
}
}
我不知道你的数据表设计,但是你可以试试这个
"从电影m中选择m.*,其中m.isDeleted=true";