공부/프로그래밍
[jpa] 테이블에 입력, 수정일시 컬럼 공통으로 하기
demonic_
2022. 2. 23. 08:00
반응형
테이블을 만들다 보면 입력, 수정일시를 모든 테이블에 적용해야할때가 있는데, 이런걸 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 등 등록된걸 확인할 수 있다.
끝.
반응형