프로그래밍/JPA4 [JPA] LazyInitializationException 해결 JPA https://jsonobject.tistory.com/605 Jackson 라이브러리는 기본적으로 엔티티의 Getter 메서드를 사용하여 JSON을 생성합니다. 따라서 Getter 메서드가 있고, 그 메서드가 연관 엔티티에 대한 접근을 포함하고 있다면, Jackson은 해당 메서드를 호출하게 됩니다. FetchType.LAZY로 설정된 연관 엔티티가 있을 경우, Jackson이 해당 연관 엔티티의 Getter 메서드를 호출하면, JPA는 연관된 엔티티를 로드하려고 시도합니다. 만약 이 시점에서 JPA 세션이 닫혀 있으면 **LazyInitializationException**이 발생하게 됩니다. 해결방법 → 연관엔티티가 있다면 Jackson 라이브러리가 Getter를 동작시키기 때문에 DTO를 .. 2023. 9. 29. [JPA] fetch LAZY인데 EAGER처럼 쿼리가 나갈 때 JPA 테스트 중에 분명 fetch LAZY로 설정했는데, sql을 보니 LAZY Entity까지 조인을 하면서 마치 EAGER처럼 동작을 하는 문제가 있었다. @OneToMany(mappedBy = "user1", fetch = FetchType.LAZY) private List userParty; @Test void test9(){ itemRepository.findByItemNameLikeAndUser1_NameLike("%2", "c%").forEach(System.out::println); System.out.println("-----"); // lazy 인데 왜 userParty 쿼리가 나갈까 } itemRepository에서 user1을 사용하는 쿼리 메서드 User1 ---> UserPar.. 2022. 8. 20. [JPA] 영속성 컨텍스트 App과 DB 사이에 있는 가상의 DB라고 생각하는 것이 직관적인 것 같다. EntityManager Factory가 스레드마다 DB에 접근 시 EntityManager를 생성한다. EntityManager가 영속성 컨텍스트를 관리한다. https://velog.io/@neptunes032/JPA-%EC%98%81%EC%86%8D%EC%84%B1-%EC%BB%A8%ED%85%8D%EC%8A%A4%ED%8A%B8%EB%9E%80 JPA 영속성 컨텍스트란? 영속성 컨텐스트란 엔티티를 영구 저장하는 환경이라는 뜻이다. 엔티티 매니저를 통해 엔티티를 저장하거나 조회하면 엔티티 매니저는 영속성 컨텍스트에 엔티티를 보관하고 관리한다.em.persist velog.io 목차 1차 캐시 더티 체킹 쓰기 지연 동일성 보.. 2022. 8. 18. [JPA] 관계 설정 연관 관계의 주인, Cascade, N+1 JPA 관계 설정 자바 관점에서 생각하지 말고, RDB 관점에서도 생각해야한다. JPA에서는 연관 관계의 주인이라는 개념이 있다. 연관 관계의 주인이란 외래 키를 관리하는 주체이다. 관점의 불일치 (1) RDB에서는 한 곳에서 외래키를 갖고 있는데 자바에서는 양방향 매핑시 양쪽 모두 서로의 Entity를 갖고 있음 RDB에서는 해당 필드(칼럼)이 없는데 자바에는 존재 관점이 다르기 때문에 발생하는 문제로 RDB 외래키를 관리해주는 Entity를 누구로 할지 결정해야한다. (2) 자바는 단방향 매핑이면 참조타입이 없는 한쪽에서 다른쪽으로 접근하는 것이 불가능, RDB는 외래키를 이용해서 조인하면 서로 접근이 가능 Q&A 무조건 외래 키가 있는 쪽이 연관 관계의 주인 ? - 대부분의 경우엔 그렇다. 하지만 .. 2022. 5. 9. 이전 1 다음