JPA 공부

· BE/JPA
안녕하세요. 이번 포스팅에서는 JPA의 기본 키 값을 자동 생성할 때 UUID 타입으로 생성하는 방법에 대해서 포스팅해보려고 합니다. 1. Long 타입(Auto_Increment / Sequence)가 아니라 UUID를 선택하는 이유? 1) 분산 DB 환경일 경우에, PK값이 중복되어 INSERT될 가능성이 있다. 2) PK값을 예측하기 쉽다. 물론, 단일 DB환경 + 데이터의 수가 적을 땐 Long 타입이 더욱 효율적이다. 2. UUID(Universally Unique Identifiers)란? 범용 고유 식별자(Universally Unique Identifiers) : 각 개체를 고유하게 식별 가능한 값 중복을 100% 방지해주는 것은 아니지만, 중복이 발생할 확률은 정말 상당히 낮은 확률이라고..
· BE/JPA
이 포스팅에서 작성하는 내용은 자바 ORM 표준 JPA 프로그래밍 (김영한 지음) 에서 발췌하였습니다. 1. 경로 표현식 .(점)을 찍어 객체 그래프를 탐색하는 것 SELECT m.username // 상태 필드 FROMMember m JOIN m.team t // 단일 값 연관 필드 JOIN m.orders o// 컬렉션 값 연관 필드 WHERE t.name = 'TEAM_A' 상태 필드(state field): 단순히 값을 저장하기 위한 필드(ex : m.username) 연관 필드(association field): 연관관계를 위한 필드 단일 값 연관 필드: @ManyToOne, @OneToOne, 대상이 엔티티(ex: m.team) 컬렉션 값 연관 필드: @OneToMany, @ManyToMany..
· BE/JPA
이 포스팅에서 작성하는 내용은 자바 ORM 표준 JPA 프로그래밍 (김영한 지음) 에서 발췌하였습니다. 1. JPQL 소개 JPQL 은 객체 지향 쿼리 언어임. 따라서 테이블을 대상으로 쿼리를 날리는 것이 아닌 엔티티 객체를 대상으로 쿼리를 날려야함. JPQL은 SQL을 추상화해서 특정 DB에 의존하지 않음 작성한 JPQL은 결국 SQL로 변환됨 2. JPQL 문법 select m from Member as m where m.age > 18 (18살을 넘은 회원을 조회) 엔티티와 속성은 대소문자 구분 O JPQL 키워드는 대소문자 구분 X 엔티티 이름(@Entity)으로 사용해야함. 테이블 이름이 아님 별칭은 필수 (m) (as 생략 가능) TypeQuery : 반환 타입이 명확할 때 사용 Query :..
· BE/JPA
이 포스팅에서 작성하는 내용은 자바 ORM 표준 JPA 프로그래밍 (김영한 지음) 에서 발췌하였습니다. 1. JPA의 쿼리 JPA는 다양한 쿼리를 지원함 JPQL JPA Criteria QueryDSL 네이티브 SQL JDBC API, MyBatis, SpringJDBCTemplate 와 함께 사용 가능 기존 단건 조회 방법 EntityManager.find() 객체 그래프 탐색 ex) schoole.getClass().getStudent() JPA를 사용하면 엔티티 객체를 중심으로 개발하는데, 조회 할 때 어떻게 할 것인가. 조회할 때도 테이블이 아닌 엔티티 객체를 대상으로 검색 애플리케이션이 필요한 데이터만 DB에서 불러오려면 검색 조건이 포함된 SQL이 필요 2. JPQL JPA는 SQL을 추상화한..
· BE/JPA
이 포스팅에서 작성하는 내용은 자바 ORM 표준 JPA 프로그래밍 (김영한 지음) 에서 발췌하였습니다. 1. 엔티티 타입 @Entity로 정의하는 객체 데이터가 변해도 식별자로 지속해서 추적 가능 2. 값 타입 int, Integer, String 처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체 식별자가 없고 값만 있기 때문에 변경되면 추적이 불가능 1) 기본값 타입 생명주기를 엔티티에 의존 값 타입은 공유하면 안됨. ex) 자바 기본 타입(int, double), 래퍼 클래스(Integer, Long), String 2) 임베디드 타입 (복합 값 타입) 새로운 값 타입을 직접 정의할 수 있음 JPA는 임베디드 타입이라 함 주로 기본 값 타입을 모아 만들어서 복합 값 타입이라고도 불림 int, St..
· BE/JPA
이 포스팅에서 작성하는 내용은 자바 ORM 표준 JPA 프로그래밍 (김영한 지음) 에서 발췌하였습니다. 1. 프록시 DB 조회를 미루는 가짜 엔티티. (실제로 객체가 사용될 때. 그 때 조회함) 1) 프록시 기초 em.find() vs em.getReference() em.find() : DB를 통해서 실제 엔티티 객체 조회 em.getReference() : DB 조회를 미루는 가짜(프록시) 엔티티 (실제로 객체가 사용될 때. 그 때 조회함) 2) 프록시 특징 실제 클래스를 상속 받아서 만들어짐 실제 클래스와 겉 모양이 같다. 사용하는 입장에서는 진짜 객체인지 프록시 객체인지 구분하지않고 사용하면 됨 프록시 객체는 실제 객체의 참조를 보관 프록시 객체를 호출하면 프록시 객체는 실제 객체의 메소드 호출 ..
· BE/JPA
이 포스팅에서 작성하는 내용은 자바 ORM 표준 JPA 프로그래밍 (김영한 지음) 에서 발췌하였습니다. 1. 상속관계 매핑 관계형 DB에는 상속 관계가 없음 (대신, 슈퍼타입 서브타입 관계가 존재함) 상속관계 매핑 : 슈퍼타입 서브타입 논리 모델을 실제 물리 모델로 구현하는 방법 하나의 마스터 테이블과 각각의 서브테이블로 분리하여 변환 : 조인 전략 하나의 테이블로 합쳐서 변환 : 단일 테이블 전략 마스터 테이블의 컬럼을 서브타입 테이블에 넣어 서브타입 테이블로만 변환 : 구현 클래스마다 테이블 전략 마스터 테이블은 추상 클래스로 생성하는 것이 맞음 주요 어노테이션 @Inheritance(strategy=InheritanceType.XXXX) JOINED : 조인 전략 SINGLE_TABLE : 단일 테..
· BE/JPA
이 포스팅에서 작성하는 내용은 자바 ORM 표준 JPA 프로그래밍 (김영한 지음) 에서 발췌하였습니다. 1. 연관관계 매핑 시 고려사항 다중성 다대일 : @ManyToOne 일대다 : @OneToMany 일대일 : @OneToOne 다대다 : @ManyToMany (다대다의 경우, 실무에서 사용하지 않는 것이 좋음) 단방향, 양방향 테이블 외래 키 하나로 서로 다른 테이블에 조인이 가능함 방향이라는 개념이 없다고 보면 됨 객체 참조용 필드가 있는 쪽으로만 참조가 가능함 한쪽에서만 참조할 수 있으면 단방향 양쪽이 서로 참조할 수 있으면 양방향(단방향이 2개) 연관관계의 주인 객체 양방향 관계에서는 참조가 2군데 → 두 객체 중 외래키를 관리 할 곳을 지정 연관관계의 주인 : 외래 키를 관리하는 참조 주인의..
멍목
'JPA 공부' 태그의 글 목록