在我的spring应用程序的一个Rest控制器中,实体的一个实例从db加载,通过在该实体上调用setXX
方法更改它的一个字段,最后它被保存回db 。
我想知道是否可以在每次调用setXX
方法后自动更新数据库中的此实例。我知道在性能方面它并不理想,但在某些情况下它对我有用。
修改1
这是我正在保存/加载实体的测试代码。我在util类中调用以下helper方法将用户详细信息保存到db:
public CustomUserDetails createUser(String username, String name, String description, String imageId) {
User user = new User();
user.setName(name);
user.setDescription(description);
user.setImageId(imageId);
CustomUserDetails userDetails = new CustomUserDetails(username,
DUMMY_PASSWORD, true, true, true, true,
AuthorityUtils.commaSeparatedStringToAuthorityList("ROLE_USER"));
userDetails.setUser(user);
userDetailsRepository.save(userDetails);
return userDetails;
}
在测试中,我通过对此方法返回的值调用User
来获取getUser
实例。我setXX
有些值,但它没有持久化。
答案 0 :(得分:1)
遵循代码摘录添加
User user = new User();
这不是托管实体..您需要保留它并/或从数据库中检索它,以便后续的setter调用保持不变(假设Transaction仍处于启用状态)。
只要实体处于托管/持久状态,然后(as per the documentation)
任何更改都会自动检测并持续存在 持久化上下文被刷新。没有必要打电话给某个人 使修改持久的方法。
同样,在Spring @Transactional
方法中,提取实体(因此处于托管/持久状态),然后直接进行setter属性调用导致财产持续存在。