[Spring Boot] JPA 강의 정리-16 (상속관계 실습)

Posted by 김성철

SpringBoot - JPA 강의 정리-16(상속관계 실습)

요구사항

- 도서 , 음반, 영화 항목 추가  
- 생성자, 생성일자, 수정자, 수정날짜를 모든 테이블에 추가  
  
단일 테이블 전략 아래와 같이 설정  
	@Inheritance(strategy = InheritanceType.SINGLE_TABLE)  
조인 전략은 아래와 같이 설정  
	@Inheritance(strategy = InheritanceType.JOINED)  

클래스

Album , Book , Movie 클래스는 각각 다 Item 클래스를 상속받았음  
그리고 Item 클래스는 공통항목에 대해서 정의를 하고 테이블 전략을 설정함  
  
=====================================================================  
@Entity  
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)  
@DiscriminatorColumn  
public abstract class Item extends BaseEntity{  
  
	@Id @GeneratedValue  
	@Column(name = "ITEM_ID")  
	private Long id;  
  
	private String name;  
	...이하 중략...  
}  
=====================================================================  
  
- Album.java  
=====================================================================  
package com.jpabook.jpashop.domain;  
  
import javax.persistence.Entity;  
  
@Entity  
public class Album extends Item{  
  
	private String artist;  
	private String etc;  
}  
=====================================================================  
  
- Book.java  
=====================================================================  
package com.jpabook.jpashop.domain;  
  
import javax.persistence.Entity;  
  
@Entity  
public class Book extends Item{  
	private String author;  
	private String isbn;  
}  
=====================================================================  
  
- Movie.java  
=====================================================================  
package com.jpabook.jpashop.domain;  
  
import javax.persistence.Entity;  
  
@Entity  
public class Movie extends Item{  
  
	private String director;  
	private String actor;  
}  
=====================================================================  
  
- BaseEntity.java ( 공통으로 적용할 컬럼들 )  
=====================================================================  
package com.jpabook.jpashop.domain;  
  
import javax.persistence.MappedSuperclass;  
import java.time.LocalDateTime;  
  
@MappedSuperclass  
public abstract class BaseEntity {  
  
	private String createBy;  
	private LocalDateTime createdDate;  
	private String lastModifiedBy;  
	private LocalDateTime lastModifiedDate;  
  
	public String getCreateBy() {  
		return createBy;  
	}  
  
	public void setCreateBy(String createBy) {  
		this.createBy = createBy;  
	}  
  
	public LocalDateTime getCreatedDate() {  
		return createdDate;  
	}  
  
	public void setCreatedDate(LocalDateTime createdDate) {  
		this.createdDate = createdDate;  
	}  
  
	public String getLastModifiedBy() {  
		return lastModifiedBy;  
	}  
  
	public void setLastModifiedBy(String lastModifiedBy) {  
		this.lastModifiedBy = lastModifiedBy;  
	}  
  
	public LocalDateTime getLastModifiedDate() {  
		return lastModifiedDate;  
	}  
  
	public void setLastModifiedDate(LocalDateTime lastModifiedDate) {  
		this.lastModifiedDate = lastModifiedDate;  
	}  
}  
  
=================================================================================================================