Spring

[SpringBoot] Entity 속성정보 상속받기

jhkimmm 2022. 4. 7. 02:47

Entity를 작성할 때 id나 생성시간, 수정시간과 같은 속성정보는 모든 Entity에 동일하게 추가되는 정보이기 때문에 코드의 중복이 발생합니다.

 

Entity마다 중복되는 컬럼들을 따로 모아서 상속받을 수 있는 방법을 알아보겠습니다.

 

먼저 중복되는 컬럼들을 가지고 있는 BaseEntity를 생성합니다.

@Getter
@MappedSuperclass
@NoArgsConstructor
@EntityListeners(AuditingEntityListener.class)
public abstract class BaseEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @CreatedDate
    private LocalDateTime createdAt;

    @LastModifiedDate
    private LocalDateTime updatedAt;

}

@MappedSuperclass 어노테이션이 핵심입니다.

이 어노테이션은 해당 엔티티의 테이블을 생성하지 않고 속성정보를 상속받을 수 있게 해줍니다.

@Getter
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Table(name = "user")
@Entity
public class User extends BaseEntity {
    private String username;
    private String password;
    private String email;
    private String authority;
}

위 코드처럼 생성한 BaseEntity를 상속받기만 해주면 id, createdAt, updatedAt 컬럼이 User 엔티티에 자동으로 추가되게 됩니다.