JPA BaseEntity Auditing ์ ์ฉ
Table of contents
@EnableJpaAuditing ์ ์ฉ
โ์์ฑ์ผ์โ, โ๋ณ๊ฒฝ์ผ์โ ์ ๊ฐ์ ๋๊ฐ, ์ธ์ ๋ฐ์ดํฐ๋ฅผ ์์ฑํ๊ณ ๋ณ๊ฒฝํ๋์ง์ ๋ํ ๋ฐ์ดํฐ๋ ์ํฐํฐ์ ๊ณตํต์ ์ผ๋ก ๋ง์ด ์ฌ์ฉ๋๋ค.
์ด๋ฌํ ๊ฐ์ ์๋์ผ๋ก ๋ฃ์ด์ฃผ๋ ๊ธฐ๋ฅ์ JPA๋ ์ ๊ณตํ๋ค.
@SpringBootApplication
@EnableJpaAuditing
@SpringBootApplication
์ด ์๋ ํด๋์ค์ @EnableJpaAuditing
์ด๋
ธํ
์ด์
์ ์ถ๊ฐํ๋ฉด ๋๋ค.
์์ ๊ฐ์ ๋ฐฉ๋ฒ์ ํ ์คํธ ์ฝ๋ ์์ฑ ์, ์ ํ๋ฆฌ์ผ์ด์ ํด๋์ค๋ฅผ ํธ์ถํ๋ ๊ณผ์ ์์ ์์ธ๊ฐ ๋ฐ์ํ ์ ์๋ค๋ ๋จ์ ์ด ์๋ค.
@Configuration
@EnableJpaAuditing
public class JpaAuditingConfiguration{
}
์์ ๊ฐ์ด Configuration ํด๋์ค๋ฅผ ํ๋ ๋ง๋๋ ๋ฐฉ๋ฒ์ด ์๋ค.
BaseEntity ์์ฑ
@Getter
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public class BaseEntity {
@CreatedDate
@Column(updatable = false)
private LocalDateTime createdAt;
@LastModifiedDate
private LocalDateTime updatedAt;
}
@MappedSuperclass
: ์์๋ฐ๋ ์ํฐํฐ ํด๋์ค์ ๋งคํ ์ ๋ณด๋ฅผ ์ ๋ฌ
@EntityListeners
: ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฉํ๊ธฐ ์ ํ๋ก ์ฝ๋ฐฑ์ ์์ฒญ
AuditingEntityListener
: ์ํฐํฐ์ Auditing ์ ๋ณด๋ฅผ ์ฃผ์ ํ๋ JPA ์ํฐํฐ ๋ฆฌ์ค๋ ํด๋์ค
@CreatedDate
: ๋ฐ์ดํฐ ์์ฑ ๋ ์ง ์๋์ผ๋ก ์ฃผ์
@LastModifiedDate
: ๋ฐ์ดํฐ ์์ ๋ ์ง ์๋์ผ๋ก ์ฃผ์
๋ฆฌ๋ทฐ Entity์ ์ ์ฉ
@Entity
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@ToString(callSuper = true)
public class Review extends BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "review_id")
private Long id;
@Column(nullable = false)
private String title;
@Column(nullable = false, length = 500)
private String content;
@Column(name = "user_id", nullable = false)
private String userId;
@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name = "hospital_id")
private Hospital hospital;
public Review(ReviewCreateRequest reviewCreateRequest,Hospital hospital) {
this.title = reviewCreateRequest.getTitle();
this.content = reviewCreateRequest.getContent();
this.userId = reviewCreateRequest.getUserId();
this.hospital = hospital;
}
}
callSuper = true
๋ถ๋ชจ ํด๋์ค ํ๋ ํฌํจํ๋ ์ญํ ์ํ
๋ฆฌ๋ทฐ DB ๋ฑ๋ก ์ ์ ์ ์ฉ๋๋ ๊ฒ์ ๋ณผ ์ ์๋ค.