kwonslog / how-to-use-jpa

0 stars 0 forks source link

EntityManager 기본 #7

Closed kwonslog closed 1 month ago

kwonslog commented 5 months ago

영속 엔티티

영속 컨텍스트

EntityManager

persist()

find()

remove()

detach()

:question: 비영속 상태와 준영속 상태의 차이점은 무엇입니까? - `비영속 상태` : 엔티티는 새로 생성되었지만 아직 EntityManager에 의해 관리되지 않는 상태 - `준영속 상태` : 영속 상태는 엔티티가 이전에 영속 상태였으나, 현재는 영속 컨텍스트에서 분리된 상태
:question: detach 메소드를 호출하여 준영속 상태를 만들어야 하는 이유는 무엇입니까? - `자원 관리` : 대량의 엔티티를 영속 상태로 두게 되면 많은 메모리가 필요하기 때문에 쓰임이 완료된 엔티티를 detach 하여 메모리를 효율적으로 관리 할수 있다. - `데이터 유지` : 엔티티의 값이 변경되지 않도록 하기 위해 detach 하고 필요할때 다시 가져와서 사용(merge)하는 경우.

merge()

:question: merge 메소드의 처리과정은? - JPA는 이 준영속 엔티티의 식별자(ID)를 사용하여 현재 영속 컨텍스트에서 같은 식별자를 가진 엔티티를 찾는다. - 같은 식별자를 가진 엔티티가 존재한다면 준영속 엔티티의 값으로 갱신한다. - 없다면 새로운 엔티티를 생성하고 준영속 엔티티의 값을 복사한 다음 영속 컨텍스트에 추가한다. - `주의할 점` - merge 는 엔티티 내의 모든 값에 대한 병합 처리를 하기 때문에 복잡한 엔티티의 경우 처리하는데 비용이 많이 발생 할 수 있다. 그러므로 변경된 부분만 따로 업데이트 처리하는 것이 더 나은 선택일 수 있다. - 그리고 merge 처리 후 반환된 엔티티를 사용해야 한다. 앞서 설명했듯 내부적으로 새로운 엔티티를 생성하고 영속 컨텍스트에 추가 되는 경우가 있기 때문이다.

close()