[JPA] em.persist 와 [repository.save](http://repository.save) 분석

persist

  • 엔티티를 영속성 컨텍스트에서 관리되도록 만든다.
  • 해당 메서드 호출시 해당 엔티티의 식별자(PK) 가 생성되며, 해당 식별자는 트랜잭션이 커밋되는 시점에 DB에 반영한다.
  • @GeneratedValue 같은 식별자 자동 생성 타입으로 설정된 경우에만 PK 를 가져올 수 있음.
    • 실제 DB에 반영되는 것은 트랜잭션이 커밋되는 시점임!

repository.save

  • EntityManager.persist 또는 EntityManager.merge를 호출
  • 주어진 엔티티가 새로운 엔티티인지 아닌지를 판단하여 적절한 작업을 수행
  • save 메서드는 호출 즉시 데이터베이스에 반영되지 않고, 트랜잭션이 커밋되는 시점에 데이터베이스에 반영
  • 차이점
    • 새로운 엔티티(식별자가 없거나 영속성 컨텍스트에 없는 엔티티)
      • persist를 호출
    • 이미 존재하는 엔티티
      • merge를 호출합니다.


Uploaded by N2T