"Show deleted"复选框未按预期工作



我已经在我想象中的视频租赁应用程序中实现了软删除行为,现在我正在尝试实现一种方法来重新激活我的"删除";客户,但我无法找到我的工作方法,当然是一些简单的事情,但谷歌没有让我找到答案,所以我来了。

以下是我的回购界面(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";

最新更新