본문 바로가기

jpa13

JPA 임베디드 타입 JPA의 데이터 타입은 크게 값 타입과 엔티티 타입으로 나눈다. 값 타입은 기본값 타입, 임베디드 타입(복합 값 타입), 컬렉션 값 타입으로 나뉘고 엔티티 타입은 @Entity로 정의하는 객체이다. 기본 값 타입은 자바 기본 타입(ex. int, double), 래퍼 클래스(ex. Integer), String 로 구성된다. 먼저 임베디드 타입부터 설명하겠다. 임베디드 타입은 JPA에서 새로운 값 타입을 정의할 수 있도록 구현한 것이다. 즉 임베디드 타입도 int나 double와 같은 값 타입 이라는 것이다. 아래의 예시를 보자. @Entity @AllArgsConstructor @NoArgsConstructor @Getter @Builder public class Article { @Id @Genera.. 2021. 7. 22.
JPA - 프록시와 연관관계(즉시로딩, 지연로딩, N + 1 문제) 들어가기 JPA는 데이터 베이스에 있는 객체를 가져올 때 우선 영속성 컨텍스트에 가져오게 된다. 그렇다면 그 객체와 연관된 객체를 가져올 때 어떻게 가져오는가? 경우는 두 가지가 있다. 첫 번째는 그 연관된 객체도 미리 영속성 컨텍스트에 올려놓는 것이다. 이 방식을 즉시 로딩이라 한다. 두 번째는 그 연관된 객체를 사용하는 시점에 가져오는 것이다. 이 방식을 지연 로딩이라 한다. 이 글에서는 이러한 두 가지 로딩 방식에 대해서 '프록시 객체'와 함께 설명할 것이다. 영속성 컨텍스트에 대한 내용이 많이 나오는데, 이에 대한 것은 https://khdscor.tistory.com/110를 참고하길 바란다. 본론 지연 로딩을 이용하기 위해선 실제 객체 대신에 데이터 베이스 조회를 지연할 수 있는 가짜 객체가 .. 2021. 7. 19.
JPA 객체 매핑- 연관 관계 1. 겍체와 테이블의 연관관계 방식 객체 연관관계로 따지면 Member 객체는 Member.team 필드로 Team 객체와 참조(주소)로 단방향 연관관계를 맺으며 member는 team필드로 Team을 알 수 있지만 Team은 Member을 알 수 없다. 테이블로 따지면 양방향 연관관계이다(단반향이 없다). MEMBER 테이블의 TEAM_ID 외래 키를 통해 TEAM과 MEMBER은 서로 조인 할 수 있기 때문이다. 2. 연관 관계 매핑JPA를 사용해서 객체방식과 테이블 방식을 매핑한다. Member 객체에 아래처럼 작성한다. @ManyToOne @JoinColumn(name="TEAM_ID") private Team team; Member.team 과 MEMBER.TEAM_ID 를 매핑하는 것이 연관관.. 2021. 7. 8.
JPQL 개념과 스프링 데이터 JPA 쿼리메서드 이용 JPA를 사용하여 프로젝트를 구현할 때 스프링 데이터 JPA를 이용하고 repository 인터페이스를 작성하여 CRUD기능을 사용하였을 것이다. 우리는 JPA를 사용하기 위해 Repository를 만들고 CRUD기능을 수행할 수 있다. 하지만 간단한 형식의 엔티티만을 가져올 뿐이지 특정 범위, 특정 경우, 특정 순서 등 복잡한 경우에 적용하기는 힘들다. 이러한 경우는 자세한 sql문을 이용해서 해결할 수 있다. ORM은 엔티티 객체를 대상으로 개발하므로 검색을 위한 sql문도 엔티티 객체를 대상으로 해야 하기에 JPQL을 사용한다. 스프링 데이터 JPA에서는 복잡한 쿼리를 쿼리 메서드를 이용하여 JPQL을 직접 짜는 것이다. 이 글에서는 JPQL에 대해서는 간단한 설명과 파라미터 바인딩에 대해서만 설명.. 2021. 6. 27.