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