본문 바로가기

JPA3

[JPA] JPA의 Entity에 기본 생성자가 필수인 이유 @Entity에는 @NoArgsConstructor가 필수라고? @Entity 어노테이션의 특성에 대해 알아보던 중, @NoArgsConstructor가 꼭 함께 쓰여야 한다는 내용을 접하게 되었다. 이를 계기로 그동안 습관적으로 클래스에 선언하던 어노테이션들에 대해 다시 한번 생각해보게 되었다. 이전에 개발했던 프로젝트를 들춰보니 아니나 다를까 @Entity와 @NoArgsConstructor가 함께 선언되어 있음을 발견할 수 있었다. 그리고, @NoArgsConstructor를 주석 처리하니 위와 같이 'public 혹은 protected의 기본 생성자를 가져야 한다'는 내용의 에러 메세지를 확인 할 수 있었다. 위의 에러 메세지에서 확인할 수 있듯 @Entity가 @NoArgsConstructor를.. 2023. 12. 17.
[JPA] N+1 문제 및 해결방안 N+1 문제란? 어떤 엔티티를 조회(1)할 때 그 엔티티에 연관된 또다른 엔티티의 갯수(N) 만큼 추가적인 조회(쿼리)가 발생하는 현상 * 1+N 이라고 칭하는 것이 보다 더 직관적이라고 여겨짐 즉, 하위 엔티티들을 첫 쿼리 실행 시 한번에 가져오지 않고 하위 엔티티별 개별적으로 쿼리가 실행되는 것 이 문제는 사용자가 늘어나고 트래픽이 증가했을 때 과장된 쿼리를 수행함으로써 DB 운영에 악영향을 끼칠 수 있다. 예시) 엔티티 Member와 Team이 ManyToOne 관계이고 객체 team1에 member1, member2, member3가 속해있는 상태다. 이때 team1을 조회하면 member1, member2, member3에 대한 조회도 자동적으로 이루어진다. 지연 로딩(LAZY)이든 즉시 로딩(.. 2022. 10. 11.
JPQL(객체지향 쿼리 언어) 1. 개요 1) JPA가 지원하는 다양한 쿼리 방법 JPQL JPA Criteria QueryDSL Native SQL JDBC API 2) JPQL 소개 JPA를 사용하면 Entity 객체를 중심으로 개발하지만 SQL은 DB의 테이블을 대상으로 쿼리를 수행 이러한 간극을 보완하기 위해 JPQL은 테이블이 아닌 Entity 객체를 대상으로 쿼리를 수행 즉, JPA는 SQL을 추상화한 JPQL이라는 객체 지향 쿼리 언어를 제공함; 특정 DB SQL에 의존하지 않음 이는 SQL문법과 유사하여 SELECT, FROM, WHERE, GROUP BY, HAVING, JOIN 지원 JPQL = 객체지향 SQL ; JPQL은 결국 SQL로 변환됨 2. 기본 문법과 기능 1) JPQL 문법 SQL 문법과 대부분 비슷함.. 2022. 10. 4.