Post

동일트랜잭션내에서삽입한데이터에대한pk로데이터조회

동일트랜잭션내에서삽입한데이터에대한pk로데이터조회

내용

Q

동일 트랜잭션내에서 삽입한 데이터에 대한 pk로 조회하면 데이터가 조회되. 그런데 db에 반영된 데이터는 트랜잭션 내에서는 아니 잖아. 이 현상을 설명해줘

A

동일 트랜잭션 내에서 삽입한 데이터를 조회할 수 있는 이유는 영속성 컨텍스트(Persistence Context) 때문입니다. 영속성 컨텍스트는 엔티티 매니저(Entity Manager)에 의해 관리되며, 트랜잭션 내에서 수행된 모든 변경 사항을 추적합니다.

  1. 영속성 컨텍스트: 트랜잭션 내에서 save 메서드를 호출하면, 엔티티는 영속성 컨텍스트에 저장됩니다. 이 시점에서 엔티티는 데이터베이스에 즉시 반영되지 않지만, 영속성 컨텍스트는 해당 엔티티를 관리합니다.

  2. 조회: 동일 트랜잭션 내에서 findById 메서드를 호출하면, 영속성 컨텍스트는 먼저 해당 엔티티가 이미 관리되고 있는지 확인합니다. 만약 엔티티가 영속성 컨텍스트에 존재하면, 데이터베이스를 조회하지 않고 영속성 컨텍스트에서 엔티티를 반환합니다.

  3. 플러시: 트랜잭션이 커밋되거나 flush 메서드가 호출될 때, 영속성 컨텍스트의 변경 사항이 데이터베이스에 반영됩니다. 하지만 트랜잭션 내에서는 영속성 컨텍스트가 엔티티를 관리하므로, 데이터베이스에 반영되지 않은 상태에서도 엔티티를 조회할 수 있습니다.

따라서, 동일 트랜잭션 내에서 삽입한 데이터를 조회할 수 있지만, 트랜잭션이 완료되기 전까지는 데이터���이스에 반영되지 않습니다.

This post is licensed under CC BY 4.0 by the author.