🍃웹개발 Spring

[Spring] JPA 상속(extends)

개발자는신이야 2022. 9. 26. 20:37

상속(extends)이란

"클래스의 상속"이라는 개념.

이미 단들어둔 클래스를 가져다 쓴다고 선언하는 것이다.

 

@예시 코드

class Person {
	private String name;
	private String getName() {
		return this.name;
	}
}

class Tutor extends Person {
	private String address;
	// Person 클래스를 상속했기 때문에,
	// name 멤버변수와 getName() 메소드를 가지고 있다.
}

 

Tutor Class에 extends Person을 추가함으로써 Person Class가 Tutor Class에 상속된것을 확인할 수 있다.

상속받는 Tutor Class는 Tutor는 Tutor안에서 선언한 address뿐만 아니라 Person Class에서 선언된 name 맴버변수와, getName() 함수를 사용할 수 있다.


 

DB의 기본은 언제 데이터가 추가되었는지 언제 수정되었는지를 알아야한다.

Timestamped - "생성일자"와 "수정일자"를 필드로 가지는 Class를 만들어 상속을 어떻게 쓰는지 알아보자.

 

Timestamped.java(상속되는 칼럼 Timestamped)

@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public class Timestamped {

    @CreatedDate
    private LocalDateTime createdAt;

    @LastModifiedDate
    private LocalDateTime modifiedAt;
}

@코드 분석

@MappedSuperclass:

아래 코드가 상속되었을 때, 컬럼으로 인식하게 한다. (컬럼이란, DB의 table안의 데이터(열)을 말한다.)

 

@EntityListeners(AuditingEntityListener.class):

아래 코드가 생성/수정 시간을 자동으로 반영하도록 설정한다.

생성/수정 둘다 적용이 되지만 해당 코드에서 업데이트 되는 코드는 수정하는 코드밖에 없어 @EntityListeners는 해당 코드의 칼럼중 modifiedAt만 적용된다.

 

@CreatedDate:

아래 코드가 최초 생성일자임을 나타낸다.

 

@LastModifiedDate:

아래 코드가 마지막 수정일자임을 나타낸다.

 

 

DomainClass.java(상속받는 테이블 DomainClass)

class DomainClass extends Timestamped {}

class GetStamped {}를 다음과 같이 변경해준다.

 

@코드 분석

extends Timestamped:

Timestamped라는 Class를 상속받는다.

 

 

RunClass.java(서버를 실행시키는 RunClass)

@EnableJpaAuditing
@SpringBootApplication
public class RunClass {

@EnableJpaAuditing:

Audit은 감시하다, 감사하다 라는 뜻으로 @EnableJpaAuditing는 Spring Data JPA에서 시간에 대해서 자동으로 값을 넣어주는 기능이다.

 

@SpringBootApplication:

스프링 부트의 가장 기본적인 설정을 선언해준다.