스프링부트
Spring Boot. [JPA] BaseTimeEntity - 생성, 수정시간을 갖는 객체
2023. 7. 3. 00:53
BaseTimeEntity.java
여러 테이블에서 공통으로 사용되는 생성 시간, 수정 시간을 프로퍼티로 갖는 객체를 설계
@Getter
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public class BaseTimeEntity {
@CreatedDate
private LocalDateTime createdTime;
@LastModifiedDate
private LocalDateTime modifiedTime;
엔터티 클래스의 필드 이름은 자바의 관습인 camel 표기법으로 작성.
테이블의 컬럼 이름은 데이터베이스의 관습인 snake 표기법으로 작성.
@MappedSuperclass
다른 도메인(엔터티) 클래스의 상위 클래스로 사용됨.
상속하는 하위 클래스는 BaseTimeEntity가 정의하는 컬럼들을 갖게 됨.
@EntityListeners(AuditingEntityListener.class)
main 메서드를 갖고 있는 메인 클래스에서 JPA Auditing 기능이 활성화되어 있는 경우에 엔터티가 삽입/수정되는 시간이 자동으로 기록되도록 하기 위해서 사용.
@CreateDate
insert 될 때의 시간이 자동으로 기록 됨.
@LastModifiedDate
update 될 때의 시간이 자동으로 기록 됨.
Post.java
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Getter
@ToString
@Entity
@Table(name = "POSTS")
@SequenceGenerator(name = "POSTS_SEQ_GEN", sequenceName = "POSTS_SEQ", allocationSize = 1)
public class Post extends BaseTimeEntity {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "POSTS_SEQ_GEN")
private Long id;
@Column(nullable = false)
private String title;
@Column(nullable = false)
private String content;
@Column(nullable = false)
private String author;
}
@Entity
JPA 엔터티 클래스 - 데이터베이스 테이블과 매핑되는 클래스.
@Table
엔터티 클래스의 이름이 데이터베이스 테이블이름과 다른 경우, 테이블 이름을 명시.
@SequenceGenerator
- name - 기본 키 생성자 이름은 POSTS_SEQ_GEN
- sequenceName - SEQ_GENERATOR가 사용할 데이터베이스의 시퀀스 객체는 POSTS_SEQ
- allocationSize - 시퀀스 객체 호출 시 증가하는 값은 1로 지정
@GeneratedValue
- 생성 전략을 GenerationType.SEQUENCE으로 지정
- 기본 키 생성자를 POSTS_SEQ_GEN으로 지정
SpringApplication.java
@EnableJpaAuditing
@SpringBootApplication
public class Spring3Application {
public static void main(String[] args) {
SpringApplication.run(Spring3Application.class, args);
}
}
@EnableJpaAuditing
JPA Auditing 기능을 활성화 함.
@SpringBootApplication
스프링 부트의 가장 기본적인 설정을 선언