본문 바로가기

Spring52

@MappedSuperclass JPA에서 여러 엔티티를 작성하다가 상속관계와는 별개로 중복되는 속성들을 공통 클래스로 빼내고 싶을 때가 있다 이를 위해, JPA에서는 @MappedSuperClass 어노테이션을 제공한다 사용방법 1. 공통 클래스 작성 (공통 클래스에는 @Entity 어노테이션을 붙이지 않는다) 주의점 BaseEntity는 DB에 테이블이 생성되지 않음 BaseEntity로 DB에 조회 불가능 2. 공통 클래스에 @MappedSuperclass 어노테이션을 붙여준다 2. 공통 클래스를 상속한 엔티티 작성 2023. 3. 24.
상속관계 매핑 자바 클래스에서는 부모클래스를 상속하여 자식클래스를 생성할 수 있다 하지만, DB에서는 상속관계 개념이 없다 대신, 논리적 모델의 슈퍼 타입과 서브타입이라는 개념이 존재한다 슈퍼 타입: 공통적인 컬럼을 가진 타입 서브 타입: 슈퍼타입에 컬럼을 추가하여 생성한 타입 예를 들어, PERSON(사람)이라는 테이블과 STUDENT(학생)와 SALARYMAN(직장인)이라는 테이블의 관계는 아래 사진과 같이 표현 가능하다 위 사진에서 PERSON이 슈퍼타입, STUDENT와 SALARYMAN을 서브타입으로 볼 수 있다 JPA에서는 슈퍼 타입과 서브타입을 매핑할 수 있는 여러 전략들을 제공한다 JPA에서 제공하는 전략은 아래와 같다 조인전략 조인전략 사용 시 테이블 구조는 아래와 같다 특징 부모-자식 테이블이 분리된.. 2023. 3. 24.
연관관계 - @ManyToMany JPA에서는 DB 테이블 간 관계를 매핑하기 위한 어노테이션들을 지원한다 이 페이지에서는 N:M 관계를 매핑하는 @ManyToMany 어노테이션에 대해 알아보겠다 Entity Entity 상에서 아래와 같이 N:M 관계를 표현할 수 있다 DB 실제 테이블 에서는 N:M 관계를 표현할 수 없다 N:M관계를 표현하기 위해 중간에 연결 테이블을 두어 1:N과 N:1관계로 풀어서 표현한다 아래 그림에서 N:M관계인 Order와 Item의 관계를 연결 테이블인 OrderItem 테이블을 두어 1:N, N:1 관계로 풀어서 표현하는 것을 볼 수 있다 양방향 연관관계 적용 1. N:M 관계에서 M의 관계인 Item에 Orders 참조변수 추가 2. ManyToMany 관계 설정 및 mappedBy 속성 추가 @Man.. 2023. 3. 23.
연관관계 - @OneToOne JPA에서는 DB 테이블 간 관계를 매핑하기 위한 어노테이션들을 지원한다 이 페이지에서는 1:1 관계를 매핑하는 @OneToOne 어노테이션에 대해 알아보겠다 1:1 관계의 경우, 외래키 관리를 주 테이블에서 할 수도 있고 대상 테이블에서 할 수도 있다 예를 들어, 한 사용자 당 1개의 휴대전화만 가질 수 있다고 해보자 그럴 경우, 사용자와 휴대전화 관계는 다음과 같이 DB와 Entity에서 1:1 관계로 표현될 수 있다 (1:1 관계의 경우 외래키에 Unique 제약조건이 걸려있어야 한다) 주 테이블에서 외래키를 관리할 경우 DB JPA 대상 테이블에서 외래키를 관리할 경우 DB JPA 연관관계의 주인 1:1 관계에서는 어느 쪽을 연관관계를 정하든 크게 문제가 없다 다만, DBA와 벡엔드 개발자의 관점.. 2023. 3. 22.