반응형
테이블을 만들다 보면 입력, 수정일시를 모든 테이블에 적용해야할때가 있는데, 이런걸 JPA와 클래스를 이용해 공통으로 만들기 좋은 방법이 바로 @MappedSuperclass 를 설정하는 것이다.
다음과 같다(mysql 기준. 오라클이나 ms-sql등은 columnDefinition 내용이 다를 수 있다.)
@MappedSuperclass
public class CommonEntity {
@CreationTimestamp
@Column(name = "REG_DT", columnDefinition = "timestamp default CURRENT_TIMESTAMP not null comment '최초 등록 일자' ")
private ZonedDateTime regDt;
@UpdateTimestamp
@Column(name = "MOD_DT", columnDefinition = "timestamp default CURRENT_TIMESTAMP not null on update CURRENT_TIMESTAMP comment '최종 변경 일자' ")
private ZonedDateTime modDt;
}
이제 이것을 상속받아 Entity를 생성한다
@Entity
@Table(name = "member")
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@DynamicInsert @DynamicUpdate
public class Member extends CommonEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "name", length = 50, columnDefinition = "varchar(50) not null comment '이름' ")
private String name;
@Column(name = "email", length = 100, columnDefinition = "varchar(100) comment '이메일' ")
private String email;
@Column(name = "mobile_no", length = 200, columnDefinition = "varchar(200) comment '전화번호' ")
private String mobileNo;
}
jpa 설정중 스키마를 수정할 수 있는 옵션을 update나 create 했다면(spring.jpa.hibernate.ddl-auto=update) 실행 시 다음처럼 스키마가 생성되는 걸 확인할 수 있다.
create table member (
id bigint not null auto_increment,
mod_dt timestamp default CURRENT_TIMESTAMP not null on update CURRENT_TIMESTAMP comment '최종 변경 일자',
reg_dt timestamp default CURRENT_TIMESTAMP not null comment '최초 등록 일자',
email varchar(100) comment '이메일',
mobile_no varchar(200) comment '전화번호',
name varchar(50) not null comment '이름',
primary key (id)
) engine=InnoDB;
mod_dt, reg_dt 등 등록된걸 확인할 수 있다.
끝.
반응형
'공부 > 프로그래밍' 카테고리의 다른 글
[react, nextjs] _app.js 에 useEffect 에서 2번씩 호출될때 (0) | 2022.04.22 |
---|---|
[maven] jar 파일 만들때 dependency 파일 첨부하기 (+파일명 고정하기) (0) | 2022.03.21 |
swagger-ui 사용 시 spring security에 경로 등록 (0) | 2022.02.21 |
[react] window is not defined 에러 (apexchart) (0) | 2022.01.12 |
[log4j] SLF4J: Class path contains multiple SLF4J bindings. 에러 (0) | 2022.01.05 |
댓글