본문 바로가기

jpa3

[JPA] 프록시 중요 포인트 Team과 Member(1:N) 연관관계를 가지는 객체가 존재할 때. 데이터를 조회시 둘다 가져와야할지 하나만 가져와야 할지 상황에따라 애매한 경우가 존재한다. jpa에서 이런 상황은 즉시 로딩과 지연 로딩에 대해 고민해야 할 문제이다. 두 개념을 알기 전에 프록시 개념의 이해가 필요하다. 프록시 프록시의 초기화 요청은 영속성 컨텍스트를 통해 이루어진다. em.find() vs em.getPersistence() 지연로딩, 즉시로딩 , 프록시 프록시 클래스 - 가짜 객체 주의1 프록시 객체는 처음 사용할 때 한 번만 초기화 된다. 프록시 객체가 초기화되는 것이 프록시가 진짜 객체로 바뀌는 것을 의미하지 않는다. 프록시 객체 내부의 target에 값이 초기화 되는 것. 프록시 객체의 타입 체크.. 2023. 10. 9.
[JPA]영속성 컨텍스트 영속성 컨텍스트 영속성 컨텍스트란 무엇인가? 엔티티를 영구 저장하는 환경이라는 뜻을 가진다. 코드로 보면EntityManager.persist(entity); 에 해당한다. 영속성 컨텍스트는 논리적인 개념으로 엔티티 매니저를 통해서 접근한다. 서비스 별로 하나의 EntityManagerFactory가 존재하고 DB에 접근하는 트랜잭션이 발생하는 경우 스레드 별로 EntityManager를 생헝하여 영속성 컨텍스트에 접근한다. 사용자로 부터 요청이 들어옴 -> EntityManagerFactory에서 요청당 1개의 EntityManager를 생성 -> EntityManager로 DB에 접근 EntityManager 에서 엔티티를 저장하거나 조회하는 경우 영속성 컨텍스트에서 엔티티를 보관하고 관리하게 된다... 2023. 9. 24.
[JPA] 더티체킹 더티체킹이란 트랜잭션이 끝날 때 엔티티의 변경을 감지하여 DB에 flush하는 것을 의미한다. 최초 조회 상태와 커밋상태를 비교하여 변경된 것이 있다면 수정한다. 따라서 영속성 컨텍스트가 관리하는 엔티티의 경우에만 더티체킹이 적용된다. 준영속(Detach), 비영속(DB반영 전) 상태의 경우 더티체킹 대상이 되지 않는다. 즉, 데이터를 변경해도 DB에 해당 부분이 적용되지 않는다. 변경된 부분만 적용하기 더티체킹은 기본적으로 모든 필드를 update를한다. 테이블의 필드가 적은 경우에는 상관 없지만, 필드가 많아지는 경우 불필요한 update는 부담이 될 수 있다. @DynamicUpdate를 사용하여 변경 필드만 수정할 수 있다. 데이터가 많은 경우 엔티티의 변경이 일어나는 것을 자동으로 확인하여 DB.. 2023. 9. 11.