JPA
-
[JPA] 값 타입Back-end/JPA 2022. 4. 28. 10:15
📌 JPA의 데이터 타입 분류 (2가지) 1) 엔티티 타입 @Entity로 정의하는 객체 데이터가 변해도 식별자로 지속해서 추적이 가능하다. 공유가 가능하다. ex) 회원 엔티티의 키나 나이 값을 변경해도 식별자로 인식 가능 2) 값 타입 int, Integer, String처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체 식별자가 없고 값만 있으므로 변경시 추적이 불가하다. 공유되면 안되는 값이다. (복사해서 사용, 불변 객체로 생성) 생명 주기를 엔티티에 의존한다. ex) 숫자 100을 200으로 변경하며 완전히 다른 값으로 대체 📌 값 타입 분류 (3가지) 기본값 타입, 임베디드 타입, 컬렉션 값 타입 총 3가지로 분류된다. 📌 기본값 타입 종류: 자바 기본 타입(int, double), 래퍼 ..
-
[JPA] 상속관계 매핑과 @MappedSuperclassBack-end/JPA 2022. 4. 27. 00:00
📌 상속관계 매핑 상속관계 매핑이 필요한 이유 관계형 데이터베이스는 상속 관계가 없다. 데이터베이스의 슈퍼타입 서브타입 관계 모델링 기법이 객체의 상속과 유사하다. 객체의 상속 구조와 데이터베이스의 슈퍼타입 서브타입 관계를 매핑하는 것이 필요하다. 데이터베이스의 슈퍼타입 서브타입 논리 모델을 실제 물리 모델로 구현하는 방법 슈퍼타입과 서브타입을 각각의 테이블로 변환 → 조인 전략 통합 테이블(서브타입에 있는 모든 컬럼을 슈퍼타입에 하나로 통합)로 변환 → 단일 테이블 전략 서브타입 테이블로 변환(서브타입 컬럼에 슈퍼타입에 있는 모든 속성을 포함하도록 구성) → 구현 클래스마다 테이블 생성 전략 📌 객체 관점 주요 어노테이션 @Inheritance(strategy = InheritanceType.XXX) ..
-
JPA의 Cross Join 개선하기Back-end/TIL 2022. 4. 20. 09:29
📌 상황 아래 예시 코드에서 PharmacyEmployee 엔티티는 Pharamcy, PharmacyEmpUser 엔티티와 각각 N:1 관계이다. 아래와 같이 JPQL 작성시 Join을 명시하지 않았다. public interface PharmacyEmployeeRepository extends JpaRepository { @Query("select pe.id as id, " + "pe.pharmacy.pharmacyName as pharmacyName, " + "pe.pharmacyEmpUser.email as email, " + "pe.pharmacyEmpUser.name as name " + "from PharmacyEmployee pe " + "where pe.pharmacy.id = :pharm..
-
[JPA] 연관관계 매핑Back-end/JPA 2022. 4. 14. 09:59
# 연관관계가 필요한 이유 객체를 테이블에 맞춰 데이터 중심으로 모델링하면, 협력 관계를 만들 수 없다. - 테이블은 외래 키(FK)로 조인을 사용해 연관된 테이블을 찾는다. - 객체는 참조를 사용해 연관된 객체를 찾는다. # 연관관계 매핑시 고려사항 3가지 단방향 vs. 양방향 양방향 관계일 때의 연관관계의 주인 다중성 @ManyToOne, @OneToMany, @OneToOne, @ManyToMany 1. 단방향 vs. 양방향 테이블 외래 키 하나로 양쪽 조인 가능 사실 방향이라는 개념이 없음 객체 참조용 필드가 있는 쪽으로만 참조 가능 한쪽만 참조하면 단방향 양쪽이 서로 참조하면 양방향 # 단방향 연관관계 객체 지향 모델링 - ORM 매핑 객체 지향 모델링 - 객체의 참조와 테이블의 외래 키를 매핑..