728x90
๋ฆฌ์ค๋
๋ชจ๋ ์ํฐํฐ๋ฅผ ๋์์ผ๋ก ์ธ์ ์ด๋ค ์ฌ์ฉ์๊ฐ ์ญ์ ๋ฅผ ์์ฒญํ๋์ง ๋ชจ๋ ๋ก๊ทธ๋ก ๋จ๊ฒจ์ผ ํ๋ ์๊ตฌ์ฌํญ์ด ์๋ค๊ณ ๊ฐ์ ํ์.
์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ์ญ์ ๋ก์ง์ ํ๋ ํ๋ ์ฐพ์๊ฐ๋ฉฐ ๋ก๊ทธ๋ฅผ ๋จ๊ธฐ๋ ๊ฒ์ ๋๋ฌด ๋นํจ์จ์ ์ด๋ค.
์ด๋ด ๋ JPA์ ๋ฆฌ์ค๋ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ฉด, ์ํฐํฐ์ ์๋ช ์ฃผ๊ธฐ์ ๋ฐ๋ฅธ ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ค.
์ด๋ฒคํธ์ ์ข ๋ฅ
์ด๋ฒคํธ์ ์ข ๋ฅ์ ๋ฐ์ ์์ ์ ๋ค์๊ณผ ๊ฐ๋ค.
- PostLoad : ์ํฐํฐ๊ฐ ์์์ฑ ์ปจํ ์คํธ์ ์กฐํ๋ ์งํ, ๋๋ refresh๋ฅผ ํธ์ถํ ํ(2์ฐจ ์บ์์ ์ ์ฅ๋์ด ์์ด๋ ํธ์ถ๋๋ค.)
- PrePersist : persist() ๋ฉ์๋๋ฅผ ํธ์ถํด์ ์ํฐํฐ๋ฅผ ์์์ฑ ์ปจํ ์คํธ์ ๊ด๋ฆฌํ๊ธฐ ์ง์ ์ ํธ์ถ๋๋ค. ์๋ณ์ ์์ฑ ์ ๋ต์ ์ฌ์ฉํ ๊ฒฝ์ฐ์๋ ์ํฐํฐ์ ์๋ณ์๋ ์กด์ฌํ์ง ์๋ ์ํ์ด๋ค. ์๋ก์ด ์ธ์คํด์ค๋ฅผ merge ํ ๋๋ ์ํ๋๋ค.
- PreUpdate : flush๋ commit์ ํธ์ถํด์ ์ํฐํฐ๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์์ ํ๊ธฐ ์ง์ ์ ํธ์ถ๋๋ค.
- PreRemove : remove ๋ฉ์๋๋ฅผ ํธ์ถํด์ ์ํฐํฐ๋ฅผ ์์์ฑ ์ปจํ ์คํธ์์ ์ญ์ ํ๊ธฐ ์ง์ ์ ํธ์ถ๋๋ค. ๋ํ ์ญ์ ๋ช ๋ น์ด๋ก ์์์ฑ ์ ์ด๊ฐ ์ผ์ด๋ ๋๋ ํธ์ถ๋๋ค. orphanRemoval ์ ๋ํด์๋ flush๋ commit ์์ ํธ์ถ๋๋ค.
- PostPersist : flush๋ commit์ ํธ์ถํด์ ์ํฐํฐ๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํ ์งํ์ ํธ์ถ๋๋ค. ์๋ณ์๊ฐ ํญ์ ์กด์ฌํ๋ค. ์ฐธ๊ณ ๋ก ์๋ณ์ ์์ฑ ์ ๋ต์ด IDENTITY์ธ ๊ฒฝ์ฐ ์๋ณ์๋ฅผ ์์ฑํ๊ธฐ ์ํด persist()๋ฅผ ํธ์ถํ๋ฉด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํด๋น ์ํฐํฐ๋ฅผ ์ ์ฅํ๋ฏ๋ก, ์ด๋๋ persist()๋ฅผ ํธ์ถํ ์งํ์ ๋ฐ๋ก PostPersist๊ฐ ํธ์ถ๋๋ค.
- PostUpdate : flush๋ commit์ ํธ์ถํด์ ์ํฐํฐ๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์์ ํ ์งํ์ ํธ์ถ๋๋ค.
- persist ์์๋ ํธ์ถ๋์ง ์๋๋ค
- ๋ณ๊ฒฝ ๊ฐ์ง๋ก ์ธํด ์ ๋ฐ์ดํธ ๋ ๋์๋ ํธ์ถ๋๋ค.
- PostRemove : flush๋ commit์ ํธ์ถํด์ ์ํฐํฐ๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ญ์ ํ ์งํ์ ํธ์ถ๋๋ค.
์ด๋ฒคํธ ์ ์ฉ ์์น
์ด๋ฒคํธ๋ ์ํฐํฐ์์ ์ง์ ๋ฐ๊ฑฐ๋, ๋ณ๋์ ๋ฆฌ์ค๋๋ฅผ ๋ฑ๋กํด์ ๋ฐ์ ์ ์๋ค.
- ์ํฐํฐ์ ์ง์ ์ ์ฉ
- ๋ณ๋์ ๋ฆฌ์ค๋ ์ฌ์ฉ
- ...
์ํฐํฐ์ ์ง์ ์ ์ฉ
@Getter
@NoArgsConstructor(access = AccessLevel.PUBLIC)
@Entity
public class Member {
@Id @GeneratedValue
@Column(name = "MEMBER_ID")
private Long id;
private String name;
@PostLoad
public void postLoad() {
System.out.println("PostLoad");
}
@PrePersist
public void prePersist() {
System.out.println("prePersist");
}
@PreUpdate
public void preUpdate() {
System.out.println("PreUpdate");
}
@PreRemove
public void preRemove () {
System.out.println("PreRemove ");
}
@PostPersist
public void postPersist() {
System.out.println("PostPersist ");
}
@PostUpdate
public void postUpdate () {
System.out.println("PostUpdate ");
}
@PostRemove
public void postRemove() {
System.out.println("PostRemove ");
}
}
๋ณ๋์ ๋ฆฌ์ค๋ ๋ฑ๋ก
@Getter
@NoArgsConstructor(access = AccessLevel.PUBLIC)
@Entity
@EntityListeners(Listener.class)
public class Member {
@Id @GeneratedValue
@Column(name = "MEMBER_ID")
private Long id;
private String name;
}
public class Listener {
@PostLoad
public void postLoad(Member obj){
System.out.println("PostLoad obj = "+obj);
}
@PrePersist
public void prePersist(Member obj){
System.out.println("prePersist"+obj);
}
@PreUpdate
public void preUpdate(Object obj){
System.out.println("PreUpdate");
}
@PreRemove
public void preRemove (Object obj){
System.out.println("PreRemove ");
}
@PostPersist
public void postPersist (Object obj){
System.out.println("PostPersist ");
}
@PostUpdate
public void postUpdate (Object obj){
System.out.println("PostUpdate ");
}
@PostRemove
public void postRemove(Object obj){
System.out.println("PostRemove ");
}
}
๋ค์ด์ค๋ ํ์ ์ด ํ์คํ๋ค๋ฉด Object ๋์ ํ์ ์ ์ ์ด์ค๋ ๋๋ค!
๐ Reference
[์๋ฐ ORM ํ์ค JPA ํ๋ก๊ทธ๋๋ฐ]
728x90
'๐๏ธ Spring > JPA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JPA] ํธ๋์ญ์ ์ ํ , ์ค์ฒฉ๋ ํธ๋์ญ์ (Transaction Propagation) (0) | 2021.12.27 |
---|---|
[JPA] ๊ณ ๊ธ ์ฃผ์ - ์์ธ ์ฒ๋ฆฌ (0) | 2021.12.23 |
[JPA] @Converter (0) | 2021.12.21 |
[JPA] JPA๊ฐ ์ง์ํ๋ ์ปฌ๋ ์ (0) | 2021.12.21 |
[JPA] @OrderBy - ๋ฆฌ์คํธ์ ์์ ์ง์ ํ๊ธฐ (0) | 2021.12.21 |