[인프런 김영한] JPA - @MappedSuperclass
2021. 2. 9. 18:02ㆍ프로그래밍 언어/Spring Framework
[인프런 김영한] JPA - @MappedSuperclass
해당 글은 인프런 김영한강사님의 영상을 보고 정리한 글입니다.
Spring Boot, Spring Data JPA를 사용해 실습하였습니다.
김영한 인프런 : www.inflearn.com/users/@yh
▣ @MappedSuperclass
* 공통 매핑 정보가 필요할 떄 사용
- DB입장에서는 공통의 컬럼이 있어도 각각 존재하지만 객체입장에서는 공통 컬럼을 한곳에 묶어서 사용하고 싶을때.
* 상속관계 매핑이 X
* MappedSuperclass 어노테이션을 붙은 테이블은 Entity가 아니다. 테이블과 매핑X
* 조회, 검색이 불가.
* 직접 생성해서 사용할 일이 없기때문에 추상클래스를 권장
※ 참고 : @Entity 클래스는 Entity 혹은 @MappedSuperclass로 지정한 클래스만 상속 가능
BaseEntity
@MappedSuperclass
public abstract class BaseEntity {
// Member와 Team에 공통으로 들어간다.
private String createdBy;
private LocalDateTime createdDate;
private String lastModifiedBy;
private LocalDateTime lastModifiedDate;
}
Member
@Entity
public class Member extends BaseEntity{
@Id
@GeneratedValue
@Column(name = "MEMBER_ID")
private Long id;
private String name;
@ManyToOne
@JoinColumn(name = "TEAM_ID")
private Team team;
}
Team
@Entity
public class Team extends BaseEntity{
@Id
@GeneratedValue
@Column(name = "TEAM_ID")
private Long id;
private String name;
@OneToMany
@JoinColumn(name = "TEAM_ID")
List<Member> members = new ArrayList<>();
}
실행문
Member member = new Member();
member.setName("user1");
member.setCreatedBy("kim");
member.setCreatedDate(LocalDateTime.now());
memberRepository.save(member);
실행결과
// 테이블 생성
Hibernate:
create table member (
member_id bigint not null,
created_by varchar(255),
created_date timestamp,
last_modified_by varchar(255),
last_modified_date timestamp,
name varchar(255),
team_id bigint,
primary key (member_id)
)
Hibernate:
create table team (
team_id bigint not null,
created_by varchar(255),
created_date timestamp,
last_modified_by varchar(255),
last_modified_date timestamp,
name varchar(255),
primary key (team_id)
)
// insert문
insert
into
member
(created_by, created_date, last_modified_by, last_modified_date, name, team_id, member_id)
values
(?, ?, ?, ?, ?, ?, ?)
| 각각의 테이블에 BaseEntity에 추가한 컬럼이 들어있으며 insert 할 떄 역시 해당 컬럼에 매핑되어 insert 된다.
'프로그래밍 언어 > Spring Framework' 카테고리의 다른 글
[인프런 김영한] JPA - 즉시로딩 / 지연로딩 (0) | 2021.02.11 |
---|---|
[인프런 김영한] JPA - 프록시 (0) | 2021.02.10 |
[인프런 김영한] JPA - 상속관계 매핑 (0) | 2021.02.09 |
[SpringMvc] Spring Interceptor 설정하기 (HandlerInterceptor) (0) | 2021.02.08 |
[인프런 김영한] JPA - 기본키 매핑 방법(@Id, @GeneratedValue) (0) | 2021.02.07 |