Итак, у меня есть такой метод:
@Transactional
public void savePostTitle(Long postId, String title) {
Post post = postRepository.findOne(postId);
post.setTitle(title);
}
Согласно этому Почта:
The save method serves no purpose. Even if we remove it, Hibernate will still issue the UPDATE statement since the entity is managed and any state change is propagated as long as the currently running EntityManager is open.
и действительно выдается инструкция обновления, но если я запустил метод без аннотации @Transactional:
public void savePostTitle(Long postId, String title) {
Post post = postRepository.findOne(postId);
post.setTitle(title);
}
Hibernate не будет выдавать инструкцию обновления, поэтому нужно вызывать postRepository.save(post); явно.
В чем разница между использованием @Transactional или нет в этом конкретном сценарии?




В стандартной конфигурации область контекста сохранения привязана к транзакции.
Если у вас нет явной транзакции, определенной с помощью аннотации, ваша (несуществующая) транзакция охватывает только вызов чтения в базе данных. После этого только что загруженный объект не управляется. Это означает, что его изменения не будут отслеживаться и сохраняться. Промывка не поможет, потому что никаких изменений не отслеживается.