복붙노트

[SPRING] Spring Boot JPA는 @Transactional에서 .save ()가 필요하지 않습니까? [복제]

SPRING

Spring Boot JPA는 @Transactional에서 .save ()가 필요하지 않습니까? [복제]

짧은 질문이 있습니다.

@Transactional 메소드에 대해 repo.save (x) 호출이 필요합니까?

저장하지 않고 DB의 변경 사항을 볼 수있는 원인을 묻고 명확한 문서를 읽지 마십시오.

의도 한대로 작동합니까, 아니면 (예상치 않은) 예기치 않은 동작입니까?

예:

@Autowired
private UserRepo repo;

@Transactional  
@PutMapping
public Long put(@RequestBody User user)
{
  User u = repo.findOne(user.getId());
  u.setName("Paul");
  repo.save(u); // DO I NEED THIS LINE?
}

확실하지 않아서 누군가가 그 주제를 밝힐 수 있을까요?

해결법

  1. ==============================

    1.예를 들어 트랜잭션 메소드 내에서 findOne 메소드 호출을 사용하여 엔티티를 검색하면 해당 시점부터 지속성 제공자가이를 관리합니다.

    예를 들어 트랜잭션 메소드 내에서 findOne 메소드 호출을 사용하여 엔티티를 검색하면 해당 시점부터 지속성 제공자가이를 관리합니다.

    이제 트랜잭션 커밋시 해당 엔티티 (실제로 프록시 오브젝트)를 변경하면 save 또는 update 메소드 호출의 사실에 관계없이 해당 변경 사항이 데이터베이스에 유지됩니다.

    처음부터 새 엔티티를 작성할 때 저장 또는 지속을 사용해야하며 지속성 제공자가 해당 존재를 아직 알지 못합니다.

    변경 사항이 발생하기 전에 특정 엔터티에서 분리 또는 제거 방법을 사용하는 경우 커밋시 변경을 방지 할 수 있습니다.

  2. from https://stackoverflow.com/questions/46708063/springboot-jpa-need-no-save-on-transactional by cc-by-sa and MIT license