# @MappedSuperclass

14개의 포스트
post-thumbnail

[SpringBoot]-@MappedSuperClass

_public @interface MappedSuperclass Designates a class whose mapping information is applied to the entities that inherit from it. A mapped superclass has no separate table defined for it. > A class designated with the MappedSuperclass annotation can be mapped in the same way as an entity except that the mappings will apply only to its subclasses since no table exists for the mapped superclass itself. When applied to the subclasses the inherited mappings will apply in the context of the su

2023년 6월 25일
·
0개의 댓글
·
post-thumbnail

[Clone Coding] @MappedSuperClass, @EntityListeners

개요 당근 마켓 클론 코딩을 진행하던 중, 코드 상 유의미하게 학습할 요소들이 있었기에 코드들을 하나 분석하며 모르는 부분들을 채워나갈 예정입니다. 이번 포스팅에서는 특정한 시각을 기록하기 위한 TimeStamp 클래스를 가져와봤는데, 이와 관련해서 작성된 @MapperSuperclass나 @EntityListeners 등을 알아보겠습니다. 코드 @MappedSuperclass의 역할 JPA에서 사용되는 애노테이션으로 상속 관계에서 부모 클래스에 해당 어노테이션을 지정함으로써 부모 클래스의 속성들을 하위 엔티티 클래스에서 사용할 수 있도록 하는 역할을 합니다. 예를 들어, TimeStamped는 LocalDateTime을 가지고 있는데, 각각의 클래스는 TimeStamped를 상속함으로써 별도의 LocalDateTime 속성을 정의할 필요가 없는 것이죠. +프로젝트 내에서 사용되는 예시 🤔 근데 일반 상속 관계랑 차이가 뭐야? 우

2023년 6월 24일
·
0개의 댓글
·

Entity 상속기능

✏️ 필요성 Entity 를 구현하다보면 반복되는 필드값을 볼 수 있다. 이러한 중복은 상위 객체를 생성해 상속하는 것으로 해결할 수 있다. ✏️ Entity 상속 📍 상위 Entity 객체 생성 Entity 를 상속시키기 위해선 abstract 객체로 생성해야 한다. @MappedSuperclass Entity 상속을 위해 선언 해줘야하는 어노테이션이다. 객체의 입장에서만 상속되는 것이기 때문에 Table 에게 영향을 미치지 않는다. 오직 자식 entity 에게 매핑 정보만 전달하게 된다. @SuperBuilder @Builder 와 기능이 거의 비슷하지만 Entity 상속을 사용할 때 선언하는 어노테이션이다. ⚠️ 어노테이션은 BaseEntity 에 선언된 필드에 한에서만 작동된다. 즉, 상속받은 Entity 에서도 BaseEntity 의 필드의

2023년 4월 30일
·
0개의 댓글
·
post-thumbnail

JPA Auditing 생성시간/수정시간 자동화

CH03 - JPA Auditing 생성시간/수정시간 자동화 생성시간과 수정시간은 유지보수에 중요한 정보 DB 삽입, 갱신 전에 날짜 데이터 등록, 수정 반복 코드를 제거하기 위해 JPA Auditing 사용 LocalDate 사용 Java8 일 경우 필수로 사용 🗯️ Date, Calendar 클래스의 문제점 불변 객체가 아니다 Calendar는 월 (Month) 값 설계 문제 BaseTimeEntity 클래스 > BaseTimeEntity.java > BaseTimeEntity 클래스는 모든 Entity 의 상위 클래스로 사용 Entity 들의 createdDate, modifiedDate 를 자동 관리 역할 @MappedSuperclass JPA Entity 클래스들이 BaseTimeEntity 을 상속할 경우 필드들도 칼럼으로 인식 `@Entit

2023년 3월 22일
·
0개의 댓글
·
post-thumbnail

고급 매핑

1. 상속 관계 매핑 > 슈퍼타입 서브타입 관계 각각의 테이블로 변환: 조인 전략 통합 테이블로 변환: 단일 테이블 전략 서브타입 테이블로 변환: 구현 클래스마다 테이블 전략 조인 전략 엔티티 각각을 모두 테이블로 만들고 자식 테이블이 부모 테이블의 기본 키를 받아서 기본 키 + 외래 키로 사용하는 전략 조회할 때 조인을 자주 사용 객체는 타입으로 구분할 수 있지만 테이블은 타입의 개념이 없음 => DTYPE 컬럼 장점 테이블이 정규화됨 외래 키 참조 무결성 제약조건을 활용할 수 있음 저장 공간을 효율적으로 사용 단점 조회할 때 조인이 많이 사용되므로 성능이 저하될 수 있음 조회 쿼리 복잡 데이터를 등록할 때 INSERT SQL 두 번 실행 특징 JPA 표준 명세는 구분 컬럼을 사용하도록 하지만 하이버네이트를 포함한 몇몇 구현체는

2023년 1월 26일
·
0개의 댓글
·
post-thumbnail

[Java/SpringBoot] 공통 필드 추출하기

💡공통필드 추출의 장단점 장점 공통되는 부분을 추출함으로써 코드의 중복을 없앨 수 있다. 추출하지 않으면 하나의 파일이 장황해질 수 있다. 단점 1엔티티를 1데이터베이스를 매칭하기로 마음먹었으면 중복되게 작성하는 것도 나쁘지 않을 수 있다. 테이블단위 변경이 가능하고, 엔티티의 개별적 대응이 가능해서 변경에 유연하다. 추출한다는 것은 한 단계 더 들어가는 것이기 때문에 한눈에 확인이 어렵다는 단점이 있다. 💡공통필드 추출하기 Embedded 공통필드를 묶은 클래스를 하나 만들어서, 엔티티에 필드를 추가한다. MappedSuperclass Embedded와 마찬가지로 공통필드를 묶은 클래스를 하나 만든다. 해당 클래스에 MappedSuperclass 어노테이션을 붙인다. 그리고 해당 클래스를 사용해야하는, 원래 공통필드가 있던 엔티티에서 MappedSuperclass 클래스를 상속받는다. 💡전체

2022년 11월 26일
·
0개의 댓글
·

@MappedSuperclass

오늘부터 틈틈히 블로그를 만드는 프로젝트를 시작하려고 한다. 그러던 와중 엔티티에서 공통적으로 사용되는 컬럼을 따로 빼야 하는 일이 있었다. 따로 빼려면 어떻게 해야할까? JPA는 이러한 상황에 사용할 수 있는 MappedSuperclass라는 어노테이션을 만들어놔 공통적인 컬럼들을 상속을 통해 쉽게 사용할 수 있게 만들어놨다. BaseTimeEntity.java @MappedSuperclass 이러한 방식으로 사용할 수 있는데, MappedSuperclass가 선언되어 있는 클래스는 엔티티가 아니다. @MappedSuperclass가 선언되어 있는 클래스를 직접 호출하여 사용하는 일이 없기때문에 abstract class로 생성(하는 것을 권장)한다. @EntityListeners(value = AuditingEntityListener.class) JPA에서 제공하는 AuditingEntityListener를 사용하면 @

2022년 10월 23일
·
0개의 댓글
·
post-thumbnail

[JPA] @MappedSuperclass

@MappedSuperclass 공통 매핑 정보가 필요할 때 사용한다. (상속관계 매핑x) 엔티티가 아니며, 테이블과 매핑되지 않음 부모 클래스(@MappedSuperclass)를 상속받는 자식 클래스에 매핑정보만 제공 DB는 변함없고, 객체입장에서 상속받아 사용하는 형태 직접 생성해서 사용하지 않기 때문에 추상클래스 권장 주로 등록일, 수정일, 등록자, 수정자 같은 전체 엔티티에서 공통으로 적용하는 정보를 모을 때 사용한다. 생성 예시) 참고 자바 ORM 표준 JPA 프로그래밍 - 기본편 - 김영한

2022년 10월 13일
·
0개의 댓글
·

고급 매핑

자바 ORM 표준 JPA 프로그래밍 http://www.kyobobook.co.kr/product/detailViewKor.laf?mallGb=KOR&ejkGb=KOR&barcode=9788960777330 상속 관계 매핑 ORM에서 이야기하는 상속 관계 매핑은 객체의 상속 구조와 데이터베이스의 슈퍼타입 서브타입 관계를 매핑하는 것이다. 매핑 방법 3가지 조인 전략 각각의 테이블로 변환하는 방법이다. 테이블은 타입 개념이 없으므로 타입을 구분하는 컬럼으로 DTYPE 컬럼을 추가해줘야한다. 부모 클래스에 @Inheritance(strategy = InheritanceType.JOINED) 를 붙여서 부모 클래스이며 조인 전략으로 매핑할 것이라고 명시한다. DTYPE 컬럼에는 @Discriminat

2022년 5월 15일
·
0개의 댓글
·
post-thumbnail

[JPA] 상속관계 매핑

본 글은 인프런 김영한님의 JPA 로드맵을 기반으로 정리했습니다. 1. 상속관계 매핑 객체지향에는 아래와 같이 클래스끼리 상속관계가 존재한다. 그러나 관계형 데이터베이스는 상속관계를 지원하지 않는다. 그 대신 데이터베이스의 슈퍼타입, 서브타입 관계라는 모델링 기법을 통해 객체의 상속관계를 매핑할 수 있다. ![](https://velog.velcdn.com/cloudflare/imcool2551/05803641-585b-4

2022년 4월 6일
·
0개의 댓글
·

@MappedSuperclass

부모클래스는 테이블과 매핑하지 않고 부모 클래스를 상속받는 자식 클래스에게 매핑 정보만 제공하고 싶을 때 사용한다. 추상클래스와 비슷하다. @Entity는 실제 테이블과 매핑되지만@MappedSuperclass는 테이블과 매핑되지 않는다. 단순히 매핑 정보를 상속할 목적으로만 사용된다 연관관계를 재정의할때는 @AssociationOverride를 사용한다 생성자에도 super를 사용해 부모클래스에 접근이 가능하도록 한다

2022년 4월 5일
·
0개의 댓글
·

[JPA] MappedSuperclass 와 Embedded

Jpa에서 createdDate, updatedDate, creator 등의 정보를 저장하도록 BaseEntity를 만드는 중, 임베디드 타입을 사용하는건 어떤지 생각해봤고 어떤 차이가 있는지 알아봤다. ref - https://www.inflearn.com/questions/18578 나와 같은 궁금증을 가진 사람이 있고 김영한님께서 답변하신 내용을 간단히 정리한다. 둘의 차이는 상속을 하는것과 위임을 하는것의 차이. 객체 지향의 일반적인 법칙을 따르면 위임(임베디드 타입)을 하는것이 좋겠지만 이와 같은 경우에는 상속이 편리함. 이유는 JPQL 쿼리를 사용할때 임베디드 타입으로 위임을 할 때에는 "select m from Member where m.traceDate.createdDate" 와 같이 위임된 필드를 추가로 적어 경로를 표시해야하지만 상속을 하는 경우에는 "select m from

2021년 11월 22일
·
0개의 댓글
·

[JPA] @MappedSuperclass로 공통 Entity 상속 받기(Created_At, Modified_At 등 공통 테이블 컬럼)

🙆‍♂️ import 🙇‍♂️ 자바 ORM 표준 JPA 프로그래밍 만약 모든 테이블에 CREATEDTIME, MODIFIEDTIME과 같은 공통 Column이 있다고 하자. 이럴때 @MappedSuperclass로 공통 Entity를 선언하고 상속받아 관리할 수 있다. 아래 코드를 보면 손쉽게 이해되고 사용할 수 있다. 두 개 이상의 Table에서 사용하는 Column들의 집합이 있다면, 일일이 추가하지말고 위와 같이 @MappedSuperclass를 활용해보자.

2021년 7월 18일
·
0개의 댓글
·

JPA Auditing과 @MappedSuperclass

@MappedSuperclass 공통의 매핑 정보를 부모 클래스에 선언하고 해당 어노테이션을 단다. DB테이블과는 상관없다. 객체의 입장에서만 상위클래스. 상속관계매핑이아니라, 자식 클래스에 매핑 정보를 제공하는 것. JPA에서 @Entity 클래스는 @Entity나 @MappedSuperclass로 지정된 클래스만 상속할 수 있다. JPA Auditing Spring Data JPA에서 자동으로 값을 넣어주는 기능 엔티티에 중복으로 들어가는 값들을 @MappedSuperclass인 상위 클래스를 만들어 주고 Auditing 기능을 이용해서 값을 자동으로 추가해준다. @EnableJpaAuditing 스프링 Auditing 기능을 추가하기 위해 붙인다. @SpringBootApplication에 해당되는 클래스에 붙임 @EntityListeners(AuditingEntityListener.class)

2021년 3월 28일
·
0개의 댓글
·