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

时间:2019-01-29 07:28:58

标签: java spring spring-boot

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

  

UserRepository

List<User> findByUsernameAndIsActiveTrue(String username);

  

用户实体

public class User {
@NotNull
@Column(name = "id_user")
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Id
private long id;
@NotNull
@Column(name = "username")
private String username;
@Column(name = "password")
private String password;
@NotNull
@Email
@Column(name = "email")
private String email;
@Column(name = "age")
private int age;
@Column(name = "address")
private String address;
@NotNull
@Column(name = "status")
private Boolean isActive;
  

UserService

    boolean deleteUser(String username);

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

1 个答案:

答案 0 :(得分:3)

  

我需要流式映射其中的值吗?

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

  

由于我稍后要使用保存,是否意味着如果另一个   元素没有输入任何值,它将为null?

无需显式调用save。只需让事务提交,它就会找出您所做的更改,并在事务提交时自动将这些更改更新到数据库。

从UserRepository中删除用户后,已经使用与数据库记录相同的值初始化了用户。如果相关的DB列不为null,则属性值将不为null。只要确保您没有更改不打算更新的属性即可。

ServiceImpl如下所示:

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

还要确保为@Transactional启用deleteUser()或等效功能。