更新实体 - 脏检查与存储库保存方法

时间:2017-11-09 13:55:45

标签: java spring-mvc spring-data-jpa

我已经看到程序员使用两种不同的方式来更新实体:

第一种方法是使服务更新方法具有事务性并使用hibernate脏检查。这是简单的更新,User类不包含任何惰性集合。

@Transactional
public void updateUser(Long id, String name) {
    User user = userRepository.find(id);
    user.update(name);
}

第二种方式使用方法保存spring-data。

public void updateUser(Long id, String name) {
    User user = userRepository.find(id);
    user.update(name);
    userRepository.save(user);
}

我应该使用哪种方式进行简单更新?

1 个答案:

答案 0 :(得分:1)

如果修改了hibernate会话已知的对象,则在刷新会话时,它将自动由hibernate保存。 我建议不要这样做,因为在你的代码中,你不知道你是在使用hibernate还是其他ORM。此外,如果在修改对象时对象不在会话中,则不会保存该对象。所以总是明确地调用save来确保你的对象被保存。