[JPA] EntityGraph 란
엔티티 그래프 : 엔티티 조회시점에 연관된 엔티티들을 함께 조회하는 기능 -정적으로 정의하는 Named 엔티티 그래프 -동적으로 정의하는 엔티티 그래프 정적 엔티티 그래프 해당 같은 케이스 때, Order을 조회하면, member를 엔티티 그래프에 정의하였기 때문에 Member도 같이조회를 한다.(패치 전략이 지연로딩이여도 적용된다.) 실제로 repository에서 사용을 한다고하면, 아래와 같다. Named 엔티티 그래프는 정적으로 정의한다. 추가로, 기존 전략이 정적으로 선언이 되어있다고 해도 코드를 활용하여, 값을 가져올때, Map 형태로 엔티티 그래프를 가져와서, 서브 그래프를 추가하고, 노드 속성을 추가하여, 전략을 바꿔 조회를 할 수 있다. 추가,서브 그래프란 무엇일까 해당과 같이 엔티티 그래..
[JPA] Open session in view(OSIV)란
OSIV가 True일 경우, 영속성 컨텍스트가 트랜잭션 범위를 넘어선 레이어까지 살아있다. API라면, 클라이언트에게 응답될 때까지, View라면, View가 렌더링 될때까지 영속성 컨텍스트가 살아있다. 쉽게 service에서 받은 lazy 로딩 전략의 엔티티를 controller에서 사용한다고 하자 controller에서 lazy 엔티티를 get하면, oslv가 true인 경우, 로딩을 하고, 프록시 객체가 실제 엔티티를 호출 쿼리가 나가고 값을 사용할수 있다. 하지만 lazy로딩일때, oslv가 false라고 가정하면, 영속성 컨텍스트가 닫혀버리면서, 지연로딩을 할수 없게된다. 기본 값이 true이긴한데, 단점이 존재한다. 영속성컨텍스트를 유지하는건 DB connection 도 계속 가지고있는 것이다..