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

"Show deleted" checkbox not working as intended

我已经在我想象中的视频租赁应用程序中实施了软删除行为,现在我正在尝试实施一种方法来重新激活我的“已删除”客户,但我无法让我的方法起作用,肯定是什么很简单,但是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);

在我的服务中class我有:

  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();
  }

我的列表视图 class 的摘录如下:

...
  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函数。我错过了什么?

我不认识你数据table设计, 但你可以试试这个

"select m.* 来自电影 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()));
    }
}