Java Hibernate:设置字段后自动保留

时间:2017-08-10 08:41:17

标签: java spring hibernate

在我的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有些值,但它没有持久化。

1 个答案:

答案 0 :(得分:1)

遵循代码摘录添加

User user = new User();

这不是托管实体..您需要保留它并/或从数据库中检索它,以便后续的setter调用保持不变(假设Transaction仍处于启用状态)。

只要实体处于托管/持久状态,然后(as per the documentation

  

任何更改都会自动检测并持续存在   持久化上下文被刷新。没有必要打电话给某个人   使修改持久的方法。

同样,在Spring @Transactional方法中,提取实体(因此处于托管/持久状态),然后直接进行setter属性调用导致财产持续存在。