목록JPA (15)
Rootable의 개발일기
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/oQTq8/btsGTFHmIQe/TVGbnEXGkFxkG9DjCMKf2K/img.jpg)
🚴♂️ 기본 키 할당 전략 JPA가 제공하는 기본 키 할당 방법은 직접 할당 방식과 자동 생성 방식이 있다. 직접 할당 방식은 애플리케이션에서 기본 키를 직접 할당하는 방식이고, 자동 생성 방식은 DB에 할당을 위임하거나 기본 키를 생성해 주는 별도의 수단을 통해 할당하는 것이다. 본 글에서는 직접 할당 방식과 RDBMS에서 많이 사용하는 자동 생성 방식에 대해 다뤄보고자 한다. 📌 직접 할당 방식 Entity를 생성할 때, Key Column에 @Id를 사용하면 된다. @Getter@Entity@NoArgsConstructorpublic class Member { @Id private Long id; ... } 해당..
📌 에러 내용 ERROR 21512 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.http.converter.HttpMessageNotWritableException: Could not write JSON: Infinite recursion (StackOverflowError); //원인 nested exception is com.fasterxml.jackson...
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bmXcJv/btsrDKp9Voc/m92EydhEsBKLk0hLeLMjXK/img.png)
📌 페치 조인이란 JPQL에서 성능 최적화를 위해 제공하는 기능으로 SQL 조인의 종류는 아니다. 연관된 엔티티나 컬렉션을 SQL 한 번에 함께 조회하는 기능으로 즉시 로딩(EAGER)과 같은 효과를 보여준다. 기본 형태 select m from Member m join fetch m.team 📌 예제 회원과 팀은 다음과 같은 관계에 있다. 둘을 조인하면 아래와 같은 결과가 나온다. 위 관계에서 현재 지연 로딩이라고 할 때, 아래와 같은 코드를 실행하면 쿼리가 몇 번 나가게 될까 영속성 컨텍스트가 빈 상태에서 회원 1이 속한 팀 A를 질의한다. 회원 2는 이미 팀 A를 질의한 상태이므로 영속성 컨텍스트에서 값을 찾을 수 있다. 마지막으로 회원 3은 영속성 컨텍스트에 없으므로 다시 DB에 팀..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bQOWkd/btsrvXwOkMH/ak2ZZ3PGHikHRN7EebBCY0/img.png)
📌 값 타입 컬렉션(Collection Value Type) 값 타입을 하나 이상 저장할 때 사용한다. 데이터베이스는 컬렉션을 같은 테이블에 저장하지 않기 때문에, 실행하면 컬렉션을 저장하기 위한 별도의 테이블이 생성된다. 📌 사용 방법 🔎 저장 서로 다른 테이블임에도 불구하고 Member만 persist해도 함께 저장되었다. 그 이유는 값 타입은 Entity의 생명 주기에 의존하기 때문에 Entity를 저장하면 함께 저장되기 때문이다. 💡 값 타입 컬렉션은 영속성 전이 + 고아 객체 제거 기능을 필수로 가진다. 🔎 조회 값 타입 컬렉션은 기본적으로 지연 로딩 전략을 사용한다. 이렇게 지연 로딩을 사용하는 이유는 @ElementCollection의 FetchType이 LAZY가 기본으로 되어 있기 때문이..