当我在一个方法中有多个操作时,saveUser 方法不会保存用户对象名称更改。如果我在 saveUser 服务方法之上使用 @Transactional(propagation = Propagation.REQUIRED) ,它工作正常。当另一个类创建一个新的 User 对象并设置其所有值并调用 createUser 方法时,它可以正常工作。为什么 saveUser 方法需要 @Transactional?在什么情况下我需要包含@Transactional?我正在使用 Spring Data 和 JPA (Hibernate impl)。有任何想法吗?
JPA 实体:
@Entity
public class User{
@Id
@GeneratedValue
private Long id;
@Column
private String name;
//getters/setters..etc
}
春季服务:
@Service
public class UserServiceImpl{
@Autowired
UserRepository userRepository;
public void saveUser(Long id){
User user = userRepository.findById(id);
user.setName("newname");
userRepository.save(user);
}
public void createUser(User user){
userRepository.save(user);
}
}
Spring Data JPA/Hibernate Impl 存储库:
public interface UserRepository extends JpaRepository<User, Long> {
}