Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将列表中一个元素的值从True更改为False_Java_Spring_Spring Boot - Fatal编程技术网

Java 将列表中一个元素的值从True更改为False

Java 将列表中一个元素的值从True更改为False,java,spring,spring-boot,Java,Spring,Spring Boot,我目前正努力尝试更改嵌套列表中的元素值 用户存储库 List findByUsernameAndIsActiveTrue(字符串用户名); 用户实体 用户服务 我试图将isActive的值更改为false,以便将其计为软删除,但我不知道代码在ServiceImpl中是如何工作的。我需要流式映射里面的值吗?因为我稍后将使用save,这是否意味着如果其他元素没有输入任何值,它将为null 我需要流式映射里面的值吗 只需使用UserRepository获取要删除的用户,然后将其active属性设置为

我目前正努力尝试更改嵌套列表中的元素值

用户存储库

List findByUsernameAndIsActiveTrue(字符串用户名);

用户实体

用户服务

我试图将isActive的值更改为false,以便将其计为软删除,但我不知道代码在ServiceImpl中是如何工作的。我需要流式映射里面的值吗?因为我稍后将使用save,这是否意味着如果其他元素没有输入任何值,它将为null

我需要流式映射里面的值吗

只需使用
UserRepository
获取要删除的用户,然后将其
active
属性设置为false

因为我以后要使用save,这是否意味着如果另一个 元素没有输入任何值,是否为空

无需显式调用
save
。只要让事务提交,它就会知道您更改了什么,并在事务提交时自动将这些更改更新到DB

从UserRepository中删除用户后,已使用与DB record相同的值对其进行初始化。如果相关DB列不为null,则属性值将不为null。只需确保不更改不打算更新的属性即可

serviceinpl
将如下所示:

@Service
public class ServiceImpl {

  private UserRepository userRepository;

  @Transactional
  public boolean deleteUser(String username){
     List<User> users =  userRepository.findByUsernameAndIsActiveTrue(username);
     for(User user : users){
         user.isActive(false);       
    }
  }
}
@服务
公共类ServiceImpl{
私有用户存储库用户存储库;
@交易的
公共布尔deleteUser(字符串用户名){
List users=userRepository.findByUsernameAndIsActiveTrue(用户名);
for(用户:用户){
user.isActive(false);
}
}
}

另外,请确保为
deleteUser()

启用
@Transactional
或等效功能。我认为您需要做两件事:首先,在用户列表中找到要更改的特定用户。然后,更改它并仅将该实体保存到存储库中。实际上,我的UserServiceImpl中有基于用户名查找的代码,但在这之后,我不知道如何指向我想要更改的特定元素<代码>@重写公共布尔deleteUser(字符串用户名){userRepository.findByUsernameAndIsActiveTrue(用户名)谢谢,我不知道这样做更容易。我在想,如果我必须映射它,然后将它映射到temp,然后替换它。实际上有什么方法可以使用JPA存储库进行操作吗?保存?我想稍后尝试制作mockito以用于测试目的。您仍然可以调用保存,它在您的情况下不会有错误,但它是无用的,而且它是有用的对于测试,我将直接测试用户的活动标志是否真的改为false。
    boolean deleteUser(String username);
@Service
public class ServiceImpl {

  private UserRepository userRepository;

  @Transactional
  public boolean deleteUser(String username){
     List<User> users =  userRepository.findByUsernameAndIsActiveTrue(username);
     for(User user : users){
         user.isActive(false);       
    }
  }
}