ORM κΈ°μ μΈ JPAλ₯Ό μ¬μ©νμ¬ λλ©μΈμ κ΄κ³ν λ°μ΄ν°λ² μ΄μ€ ν
μ΄λΈμ λ§€νν λ 곡ν΅μ μΌλ‘ λλ©μΈλ€μ΄ κ°μ§κ³ μλ νλλ 컬λΌλ€μ λ μ‘΄μ¬ν©λλ€.
λνμ μΌλ‘ μμ±μ, μμ μ, μμ±μΌμ, μμ μΌμ, μλ³μ κ°μ νλ λ° μ»¬λΌμ΄ μμ΅λλ€.
λλ©μΈλ§λ€ 곡ν΅μΌλ‘ μ‘΄μ¬νλ€λ μλ―Έλ κ²°κ΅ μ½λκ° μ€λ³΅λλ€λ λ§κ³Ό μΌλ§₯μν΅νλ°, μμ±μ, μμ μ, μμ±μΌμ, μμ μΌμ κ°μ 컬λΌμ DB κ΄μ μμ λ§€μ° μ€μν λ°μ΄ν°μ λλ€.
κ·Έλμ JPAμμλ Auditμ΄λΌλ κΈ°λ₯μ μ 곡νκ³ μμ΅λλ€.
Auditμ κ°μνλ€λΌλ λ»μΌλ‘ Spring Data JPAμμ μκ°μ λν΄μ μλμΌλ‘ κ°μ λ£μ΄μ£Όλ κΈ°λ₯μ
λλ€.
λλ©μΈμ μμμ± μ»¨ν
μ€νΈμ INSERT νκ±°λ UPDATE νλ κ²½μ° λ§€λ² μκ° λ°μ΄ν°λ₯Ό μ
λ ₯νμ¬ μ μ₯ν΄μΌ νλλ°, auditμ μ΄μ©νλ©΄ μλμΌλ‘ μκ°μ λ§€ννμ¬ ν
μ΄λΈμ λ°μν μ μμ΅λλ€.
1. build.gradeμ μμ‘΄μ± μΆκ°
dependencies {
compile('org.springframework.boot:spring-boot-starter-web')
compile('org.projectlombok:lombok')
compile('org.springframework.boot:spring-boot-starter-data-jpa')
}
κΈ°λ³Έμ μΌλ‘ μ€νλ§ λΆνΈμμ gradleλ‘ μμ‘΄μ±μ κ΄λ¦¬νκ² λ κ²½μ° spring-boot-starter-data-jpaλ§ μΆκ°ν΄λ Auditμ νλλ°λ λ¬Έμ κ° μμ΅λλ€.
2. BaseEntity μμ±
@Setter
@Getter
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public class BaseEntity {
private String useYn = "Y";
@CreationTimestamp
@Column(updatable = false)
private LocalDateTime rgstDt;
@UpdateTimestamp
private LocalDateTime mdfyDt;
public BaseEntity() {
...
}
@CreatedDate : Entityκ° μμ±λμ΄ μ μ₯λ λ μκ°μ΄ μλ μ μ₯
@LastModifiedDate : μ‘°νν Entityμ κ°μ λ³κ²½ν λ μκ°μ΄ μλ μ μ₯
3. JPA Auditing νμ±ν
@EnableJpaAuditing
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
μ€νλ§ λΆνΈμ Entry ν¬μΈνΈμΈ μ€ν ν΄λμ€μ @EnableJpaAuditing μ΄λ Έν μ΄μ μ μ μ©νμ¬ JPA Auditingμ νμ±ν ν©λλ€.
4. κ³΅ν΅ BaseEntity μμ
@Getter
@NoArgsConstructor
@Entity
public class Board extends BaseEntity{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(length = 500, nullable = false)
private String title;
@Column(columnDefinition = "TEXT", nullable = false)
private String content;
@Column
private String rgstId;
@Column
private String mdfyId;
}
μ΄λ° μμΌλ‘ μμλ§ ν΄μ£Όκ³ Board ν
μ΄λΈμ λν Insert, Update μ μλμΌλ‘
RGST_DT, MDFY_DT 컬λΌμ κ°μ μ±μμ£Όλ κ²μ νμΈν μ μμ΅λλ€.
λ€μ ν¬μ€ν μμλ μ’ λ λμκ°μ RGST_ID(μμ±μ)μ MDFY_ID(μμ μ) JPA Auditingμ νμ©νμ¬ μλν μ μ©νλ λ°©λ²λ μμλ³΄κ² μ΅λλ€.
'JPA' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
JPA @Embedded, @Embeddable μ¬μ©νκΈ° (1) | 2023.03.10 |
---|
λκΈ