Skip to content

Commit

Permalink
Add jpa/JPA Entity Lifecycle Event
Browse files Browse the repository at this point in the history
- JPA Entity의 생λͺ…μ£ΌκΈ° 변화에 따라 λ°œν–‰λ˜λŠ” μ΄λ²€νŠΈλ“€
  • Loading branch information
hyh1016 committed Mar 22, 2024
1 parent 2bd4576 commit f7c45ae
Showing 1 changed file with 92 additions and 0 deletions.
92 changes: 92 additions & 0 deletions java/jpa/JPA_Entity_Lifecycle_Event.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
# JPA Entity Lifecycle Event

## JPA Entity Lifecycle

- JPA의 엔티티에도 생λͺ…주기에 따라 λ°œν–‰λ˜λŠ” μ΄λ²€νŠΈλ“€μ΄ 쑴재
- μ΄λŸ¬ν•œ μ΄λ²€νŠΈλ“€μ€ μ–΄λ…Έν…Œμ΄μ…˜ ν˜•νƒœλ‘œ 지원됨
- `@PrePersist` - μ˜μ† μƒνƒœλ‘œ μ „ν™˜λ˜κΈ° 전에 호좜
- `@PostPersist` - μ˜μ† μƒνƒœλ‘œ μ „ν™˜λœ ν›„ 호좜
- `@PreLoad` - μ˜μ†μ„± μ»¨ν…μŠ€νŠΈμ— λ‘œλ“œλœ ν›„ 호좜
- `@PreUpdate` - μˆ˜μ •μ΄ λ°œμƒν•˜κΈ° 전에 호좜
- `@PostUpdate` - μˆ˜μ •μ΄ λ°œμƒν•œ ν›„ 호좜
- `@PreRemove` - μ—”ν‹°ν‹°κ°€ 제거되기 전에 호좜
- `@PostRemove` - μ—”ν‹°ν‹°κ°€ 제거된 ν›„ 호좜

## μ‚¬μš© 방법

### Entity에 λ©”μ„œλ“œ μ„ μ–Έ

```java
@Entity
public class MyEntity {

@Id
@GeneratedValue
private long id;

private String name;

@PrePersist
public void prePersist() {
// μ—”ν‹°ν‹° μ˜μ†ν™” 이전에 μˆ˜ν–‰λ  둜직
}

@PostPersist
public void postPersist() {
// μ—”ν‹°ν‹° μ˜μ†ν™” 이후 μˆ˜ν–‰λ  둜직
}

}
```

- μ–΄λ…Έν…Œμ΄μ…˜μ΄ μ§€μ •λœ 콜백 λ©”μ„œλ“œλ₯Ό λ“±λ‘ν•˜λ©΄ μ—”ν‹°ν‹° μƒνƒœμ— λ³€ν™”κ°€ 일어날 λ•Œ μ•Œλ§žμ€ 콜백 둜직이 μˆ˜ν–‰λ¨
- λ°˜ν™˜κ°’μ€ voidμ—¬μ•Ό 함
- μœ„μ™€ 같이 μ‚¬μš©ν•˜λŠ” 경우, μ—”ν‹°ν‹° 내에 μ„ μ–Έλœ λ©”μ„œλ“œμ΄λ―€λ‘œ thisλ₯Ό 톡해 λ‚΄λΆ€ ν•„λ“œμ— μ ‘κ·Ό κ°€λŠ₯

### 별도 ν΄λž˜μŠ€μ— μ„ μ–Έ ν›„ EventListeners둜 등둝

```java
public class MyJpaEventListener {

@PrePersist
public void prePersist(MyEntity myEntity) {
// μ—”ν‹°ν‹° μ˜μ†ν™” 이전에 μˆ˜ν–‰λ  둜직
}

@PostPersist
public void postPersist(MyEntity myEntity) {
// μ—”ν‹°ν‹° μ˜μ†ν™” 이후 μˆ˜ν–‰λ  둜직
}

}
```

```java
@Entity
@EntityListeners(MyJpaEventListener.class)
public class MyEntity {

@Id
@GeneratedValue
private long id;

private String name;

}
```

- μ—¬λŸ¬ μ—”ν‹°ν‹°μ—μ„œ κ³΅ν†΅μ μœΌλ‘œ λ“±λ‘ν•˜λŠ” 콜백 λ©”μ„œλ“œμ˜ 경우 μœ„μ™€ 같이 별도 μ»€μŠ€ν…€ λ¦¬μŠ€λ„ˆλ₯Ό λ§Œλ“€μ–΄ μž¬μ‚¬μš©μ΄ κ°€λŠ₯
- 인자둜 μ—”ν‹°ν‹°λ₯Ό μ£Όμž…λ°›μ•„ λ‚΄λΆ€ ν•„λ“œ 값에 μ ‘κ·Ό κ°€λŠ₯
- μ£Όμ˜ν•  점은, 이 경우 spring boot application 클래슀 λ˜λŠ” jpa configuration ν΄λž˜μŠ€μ— `@EnableJpaAuditing` μ–΄λ…Έν…Œμ΄μ…˜μ„ μ§€μ •ν•΄μ€˜μ•Ό 함

## 유의 사항

### 콜백 λ©”μ„œλ“œμ—μ„œ μ˜ˆμ™Έ λ°œμƒ μ‹œ

- 이벀트λ₯Ό λ°›μ•„ μ²˜λ¦¬ν•˜λŠ” 콜백 λ©”μ„œλ“œμ—μ„œ μ˜ˆμ™Έκ°€ λ°œμƒν•˜λ©΄ **νŠΈλžœμž­μ…˜μ€ 둀백됨**
- μ™œλƒν•˜λ©΄, 동일 μŠ€λ ˆλ“œ 동일 νŠΈλžœμž­μ…˜ μŠ€μ½”ν”„ λ‚΄μ—μ„œ ν˜ΈμΆœλ˜λŠ” 둜직이기 λ•Œλ¬Έ
- 즉, 이벀트의 호좜 μ‹œμ μ€ Pre~의 경우 νŠΈλžœμž­μ…˜ μŠ€μ½”ν”„λ₯Ό μ—° 뒀이며, Post~의 경우 λ‹«κΈ° μ „μž„

## Reference

[JPA Entity Lifecycle Events | Baeldung](https://www.baeldung.com/jpa-entity-lifecycle-events)

0 comments on commit f7c45ae

Please sign in to comment.