我目前正在努力更改嵌套列表中的元素值。
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,那是否意味着如果其他元素没有输入任何值,它将为空吗?
答案 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()
或等效功能。