JPA

    JPA 영속성 컨텍스트란?

    영속성 컨텍스트란? 영속성 컨텐스트란 엔티티를 영구 저장하는 환경이라는 뜻이다. 애플리케이션과 데이터베이스 사이에서 객체를 보관하는 가상의 데이터베이스 같은 역할을 한다. 엔티티 매니저를 통해 엔티티를 저장하거나 조회하면 엔티티 매니저는 영속성 컨텍스트에 엔티티를 보관하고 관리한다. 영속성 컨텍스트의 특징 엔티티 매니저를 생성할 때 하나 만들어진다. 엔티티 매니저를 통해서 영속성 컨텍스트에 접근하고 관리할 수 있다. 엔티티 저장 em.persist(member); 엔티티 매니저를 사용해 회원 엔티티를 영속성 컨텍스트에 저장한다는 의미! 엔티티 찾기 em.find(Member.class,id); EntityManager에서 find를 하면 먼저 1차캐시에서 조회를 한 후 값이 있으면 DB를 조회하지 않고 ..

    JPA 영속성관리 , N+1 문제 발생 원인 및 해결방법

    [JPA] N+1 문제 발생 원인과 해결방법 💡 원인 [JPA] 영속성 관리, 준영속 상태와 지연 로딩, N+1 문제 발생 원인 JPA를 사용하여 개발할 때, 성능상 주의해야 할 것이 N+1 문제이다. 📌 즉시 로딩과 N+1 일반적으로 제공되는 find() 메소드 등을 사용할 때는 jpa가 내부적으로 join문에 대한 쿼리를 만들어서 반환을 하기 때문에 즉시 로딩이 큰 문제가 없어 보이기도 합니다. 그러나 JPQL을 사용할 때, 문제가 발생합니다. JPA는 JPQL을 사용할 때는 글로벌 페치 전략을 참고하지 않고 오직 JPQL 만 사용하기 때문에, 즉시 로딩 / 지연 로딩 구분 없이 쿼리문만 따르게 됩니다. List classrooms = em.createQuery("select c from Classr..

    JAVA Stream을 이용해서 모든회원정보 추출

    다음과 같은 코드는 rest api 를 작성한 코드입니다. @GetMapping("/api/v2/members") public Result memberV2(){ List findMembers=memberService.findMembers(); List collect=findMembers.stream() .map(m-> new MemberDto(m.getName())) .collect(Collectors.toList()); return new Result(collect.size(), collect); } @Data @AllArgsConstructor static class Result{ private int count; private T data; } @Data @AllArgsConstructor stat..

    JPA 연관관계 매핑

    양방향 매핑 아래와 같은 관계를 가지는 두 TABLE이 있다고 하자. USER와 GROUP은 다대일 관계이고, GROUP에서 USER는 일대다 관계이다. 위 두 TABLE을 JPA에서 Entity로 Mapping할때 일대다 관계의 경우 여러 건과 연관관계를 맺을 수 있으므로, Collection을 사용해야한다. JPA는 List 포함 Collection, Set, Map 등을 지원 위 관계에서 USER, GROUP Entity 예시는 아래와 같다. @Entity public class User { @Id @Column(name = "U_ID") @GeneratedValue(strategy = GenerationType.IDENTITY) private long id; private String name; ..