본문 바로가기

jpa

(9)
[Hibernate] Spring Boot Querydsl 설정하기 1. Querydsl 이란? JPA를 이용해서 복잡한 쿼리나 동적 쿼리를 작성할 경우 소스코드가 지저분해지는 경우가 많습니다. 이때 Querydsl 라이브러리를 이용해면 쿼리문자가 아니라 자바코드로 쿼리를 작성할 수 있습니다. 2. Querydsl의 장점 1. 자바코드로 쿼리를 작성하기 때문에 가독성이 좋아집니다. 2. 문법 오류를 컴파일 시점에서 잡아줍니다. 3. 동적 쿼리를 쉽게 만들 수 있습니다. 3. Querydsl 설정하기 테스트 환경은 다음과 같습니다. (버전을 모두 맞춰 주어야합니다!) spring boot 2.2.2 RELEASE maven java 11 h2 1) pom.xml ... org.springframework.boot spring-boot-starter-data-jpa org...
[JPA] 프록시와 지연로딩 1. 프록시란? 프록시는 대리 응답, 중계 등 다양한 의미로 사용되는 용어입니다. 프록시는 JPA 기본 스펙은 아니지만 Hibernate에서 프록시라는 기능을 제공합니다. 프록시는 지연로딩(Lazy Loading) 기능을 위해 사용되며 지연로딩이란 연관 매핑 객체가 있을 때, 해당 객체의 조회를 미루고, 해당 객체를 사용할 때 조회하는 것을 의미합니다. 2. 프록시 설명 및 사용 예제 원활한 테스트를 위해 미리 엔티티들을 생성해놓겠습니다. Member와 Team 엔티티가 있고 다대 일 관계입니다. @Entity public class Team { @Id @GeneratedValue private Integer id; private String name; //getter,setter 생략 } @Entity..
[JPA] 엔티티 매핑 어노테이션 정리 엔티티 매핑 시 자주 사용되는 어노테이션을 정리한 글입니다. 1. @Entity @Entity 어노테이션이 선언된 클래스를 DB 테이블과 매핑합니다. 2. @Column 필드 속성을 지정할 때 사용합니다. 이름 설명 기본 값 name 필드 명을 지정 객체의 필드 이름 insertable 등록 가능 여부 true updatable 수정 가능 여부 true nullable DDL 생성 시 설정 값에 따라 null 가능여부를 설정 true unique DDL 생성 시 간단하게 한 컬럼에 유니크 제약조건을 설정 false columnDefinition 테이블 컬럼 속성을 직접 설정 ex : varchar(50) not null default 'none' length 문자 길이 제약 조건을 설정 255 preci..
[JPA] 기본키 자동 생성 전략(Primary Key) 1. Goal 1) 기본키 매핑 방법 2) 기본키 자동 생성 전략 4가지 2. 기본키 매핑 방법 @Entity public class User { @Id private Long id; } 기본키로 지정하고 싶은 변수에 @Id 어노테이션을 선언하면 해당 컬럼이 기본키로 지정됩니다. 3. 기본키 자동 생성 전략 4가지 기본키를 자동으로 생성하려면 @GeneratedValue(strategy = GenerationType.AUTO) 어노테이션을 기본키 변수 위에 선언해주면 됩니다. 기본키 자동 생성 전략은 4 가지가 있으며 전략속성을 생략하면 AUTO 속성으로 지정됩니다. 1) AUTO @Entity public class User { @Id @GeneratedValue(strategy = Generation..
[JPA] @MappedSuperclass 사용법 1. @MappedSuperclass란? 엔티티 별로 공통 필드가 존재하는 경우 불 필요한 중복 코드를 제거하기 위해 사용합니다. 2. 사용방법 1) BaseEntity.java import javax.persistence.MappedSuperclass; import java.time.LocalDateTime; @MappedSuperclass public abstract class BaseEntity { private LocalDateTime createDt; private LocalDateTime updateDt; } @MappedSuperclass 어노테이션을 클래스명 위에 선언하며, 공통 클래스를 별도로 생성하는 일이 없다면 추상 클래스로 선언하는 것이 좋습니다. 등록일, 수정일 같이 여러 테이블에..
[JPA] 상속 관계 매핑 1. 상속 관계 매핑이란? 슈퍼타입 테이블, 서브타입 테이블을 자바에서 상속관계인 것 처럼 사용하는 방법입니다. 2. 상속 관계 매핑 전략의 종류 1) JOINED (조인전략) 슈퍼타입과 서브타입을 식별관계로 사용하는 방법입니다. 2) SINGLE_TABLE (단일 테이블 전략) 슈퍼타입과 서브타입을 하나의 테이블로 생성하는 전략입니다. 3) TABLE_PER_CLASS (타입 별 테이블 생성 전략) (비추천) 파일 타입 별로 테이블을 생성하는 전략입니다. 3. 상속 관계 매핑 적용 1) FileInfo.java import javax.persistence.*; @Entity @Table(name = "file_info") @Inheritance(strategy = InheritanceType.JOINE..
[JPA] Hibernate 연동 방법 1. 테스트 환경 JAVA 1.8 Maven Mysql 2. Hibernate 연동 및 테스트 1) Maven 프로젝트 생성 2) pom.xml hibernate와 mysql connector 라이브러리를 추가해줍니다. org.hibernate hibernate-entitymanager 5.3.10.Final mysql mysql-connector-java 6.0.6 3) persistence.xml 작성 DB 접속 정보 및 hibernate 설정 정보를 작성합니다. persistence.xml 파일의 경로는 반드시 src/main/resources/META-INF 아래에 위치해야 합니다. 4) Member entity 생성 및 테이블 생성 Member.java package entity; import ..
[JPA] 영속성 컨텍스트 목표 JPA를 활용하기 위해 가장 중요한 개념인 영속성 컨텍스트의 기능 이해하기 Entity의 생명 주기 이해하기 영속성 컨텍스트(Persistent Context) 영속성 컨텍스트란 엔티티를 관리하고 영속화시키는 환경을 의미합니다. 영속성 컨텍스트가 지원하는 기능은 다음과 같습니다. 지연로딩 동일성 보장 1차 캐시 변경 감지 트랜잭션을 지원하는 쓰기 지연 Entity Manager와 Entity Manager Factory Entity Manager는 엔티티를 조회하거나 등록, 수정, 삭제 시키기 위해 DB에 접근할 수 있는 객체입니다. EntityManagerFactory는 Entity Manager를 생성합니다. 객체 생성 비용이 상당히 크기 때문에 한번만 생성하여 애플리케이션 전체에서 사용합니다...