데이터베이스 테이블 설계할 때, 생성 시각, 수정 시각, 수정한 사람 등의 컬럼을 공통적으로 적용하게 되는 경우가 있다. 이 때 유용한 JPA의 어노테이션이 @MappedSuperclass
과 JPA Auditing 기능이다.
@MappedSuperclass
부모 클래스는 테이블과 매핑하지 않고 부모 클래스를 상속받는 자식 클래스에게 매핑 정보만 제공하고 싶으면 @MappedSuperclass
를 사용하면 된다.
@MappedSupperclass
는 비유하자면 추상 클래스와 비슷하다. @Entity
는 실제 테이블과 매핑되지만, @MappedSuperclass
는 실제 테이블과 매핑되지 않는다. 단순히 매핑 정보를 상속할 목적으로만 사용된다.
@AttributeOverrides
@MapperSuperclass
어노테이션으로 상속받은 매핑 정보를 재정의하기 위한 어노테이션이다. 아래와 같이 사용하면 된다.
@AttirbuteOverrides({
@AttributeOverride(name="", colume=@Column(name="")),
@AttributeOverride(name="", colume=@Column(name=""))
})
- 테이블과 매핑되지 않고 자식 클래스에 엔티티의 매핑 정보를 상속하기 위해 사용한다.
@MappedSuperclass
로 지정한 클래스는 엔티티가 아니므로em.find()
나 JPQL에서 사용할 수 없다.- 이 클래스를 직접 생성해서 사용할 일은 거의 없으므로 추상 클래스로 만드는 것을 권장한다.
테이블과는 관계가 없고 단순히 엔티티가 공통으로 사용하는 매핑 정보를 모아주는 역할을 할 뿐다. ORM에서 이야기하는 진정한 상속 관계 매핑은 데이터베이스의 슈퍼타입 서브타입 관계와 매핑하는 것이다.
데이터베이스 테이블에 생성, 수정, 삭제 시간을 일괄 컬럼 매핑하고 값을 자동으로 넣어주고 싶을 때 @MappedSuperclass
로 컬럼을 매핑하고 JPA Auditing으로 값을 넣어주면 된다.
@EnableJpaAuditing
- 스프링 Auditing 기능을 설정하는 것이다. @SpringBootApplication와 같은 클래스에 적용한다.@EntityListeners(AuditingEntityListener.class)
- 엔티티 클래스에 적용하면 해당 엔티티 클래스는 Auditing 기능을 사용하게 된다.@CreatedDate
, @LastModifiedDate
- 자동으로 값을 수정할 컬럼에 적용한다.자바 ORM 표준 JPA 프로그래밍 7장
https://webcoding-start.tistory.com/53