programing

스프링 데이터 jpa의 saveAndFlush와 saveAndFlush의 차이

goodjava 2023. 2. 15. 22:02

스프링 데이터 jpa의 saveAndFlush와 saveAndFlush의 차이

몇 가지 CRUD 동작을 테스트하여 스프링 데이터 JPA를 배우려고 합니다.JpaRepository.

나는 두 가지 방법을 발견했다.save그리고.saveAndFlush이 둘의 차이를 모르겠어요.전화 시save또한 나의 변경사항이 데이터베이스에 저장되는 중인데, 이 변경사항은 어떤 용도로 사용됩니까?saveAndFlush.

- 그래, 아니에요! - 왜요?saveAndFlush변경 내용은 이 명령어로 즉시 DB로 플러시됩니다.와 함께save이것은 반드시 맞는 것은 아니며, 메모리에만 남아 있을 수 있습니다.flush또는commit명령어가 발행됩니다.

그러나 트랜잭션의 변경 사항을 플러시하고 커밋하지 않더라도 이 트랜잭션의 커밋이 완료될 때까지 변경 내용은 외부 트랜잭션에 표시되지 않습니다.

당신의 경우, 아마도 어떤 종류의 트랜잭션 메커니즘을 사용하고 있을 것입니다.commit모든 일이 잘 풀리면 명령을 내릴 수 있습니다.

사용하고 있는 휴지 상태의 플래시 모드에 따라 다릅니다( ).AUTO는 디폴트입니다.save변경 내용을 DB에 바로 쓸 수도 있고 그렇지 않을 수도 있습니다.전화할 때saveAndFlushDB와 모델 상태 동기화를 시행하고 있습니다.

플래시 모드를 AUTO로 사용하고, 애플리케이션을 사용해 데이터를 보존하고 나서 다시 선택하고 있는 경우는, 그 사이에 바하비어의 차이를 확인할 수 없습니다.save()그리고.saveAndFlush()select가 먼저 플러시를 트리거하기 때문입니다.메뉴얼을 참조해 주세요.

두 방법 모두 데이터베이스에 엔티티를 저장하는 데 사용됩니다.플러시는 지속성 컨텍스트의 상태를 기본 데이터베이스와 동기화하는 프로세스입니다.

saveAndFlush 메서드를 사용하면 데이터가 즉시 데이터베이스로 플러시됩니다.이러한 저장 메서드를 사용하려면 flush() 메서드를 명시적으로 호출해야 합니다.플러시를 사용하면 동일한 트랜잭션 중 나중에 커밋 전에 저장된 변경 내용을 읽을 수 있습니다.따라서 커밋할 필요가 없는 경우에도 롤백할 수 있습니다.

봄 데이터 Jpasave()method를 사용하면 엔티티를 DB에 저장할 수 있습니다.의 소유입니다.CrudRepositorySpring Data에 의해 정의된 인터페이스입니다.

save() 메서드를 사용하면 flush() 메서드 또는 commit() 메서드에 대한 명시적인 호출이 이루어지지 않는 한 저장 조작과 관련된 데이터는 DB로 플러시되지 않습니다.

예를 들어 엔티티 및 JPA 저장소를 만듭니다.

@Data
@Entity
public class User{

    @Id
    private Long id;
    private String name;
}


public interface UserRepository extends JpaRepository<User, Long> {
}

그러면 사용할 수 있습니다.save(), 이런 방법,

userRepository.save(new User(1L, "Geeth"));

★★★★★★★★★★★★★★★★★.saveAndFlush() 와 다른 방법save() . 。saveAndFlush()메서드는 실행 중에 즉시 데이터를 플러시합니다. 데이터 JPA JPA JpaRepository과 같이 할 수 .을 사용하다

userRepository.saveAndFlush(new User(2L, "Sam"));

일반적으로 이 방법은 비즈니스 로직이 동일한 트랜잭션 중 나중에 저장된 변경 사항을 커밋하기 전에 읽어야 할 때 사용합니다.

예를 들어 저장하려는 엔티티의 속성을 예상하는 저장 프로시저를 실행해야 하는 시나리오를 상상해 보십시오.이 경우 변경 내용이 DB와 동기화되지 않고 저장 프로시저가 변경 내용을 인식하지 못하기 때문에 save() 메서드는 작동하지 않습니다.saveAndFlush() 메서드는 이러한 시나리오에 매우 적합합니다.

언급URL : https://stackoverflow.com/questions/21203875/difference-between-save-and-saveandflush-in-spring-data-jpa