save() ๋ช
์ ์ SimpleJpaRepository ์ save() ๋ฉ์๋์์ entityInformation.isNew(entity) ๋ถ๊ธฐ๋ฌธ์ ํตํด em.persist() ์ธ์ง em.merge() ์ธ์ง ํ๋ณํ๋ค.
isNew() ๋ฉ์๋
Persist
DefaultPersistEventListener ์์ onPersist ์ ํ๋ผ๋ฏธํฐ๋ก Event ์ธ์๋ Cache ๋ก ํ์ฉํ IdentityHashMap ๊ฐ์ฒด๊ฐ ์ถ๊ฐ๋ก ํ์ํ๋ค.
Merge
DefaultPersistEventListener ์์ onMerge ์ ํ๋ผ๋ฏธํฐ๋ก Event ์ธ์๋ Cache ๋ก ํ์ฉํ MergeContext(IdentityHashMap ์ ๊ฐ์ผ ๊ฐ์ฒด์ธ๋ฏ) ๊ฐ์ฒด๊ฐ ์ถ๊ฐ๋ก ํ์ํ๋ค.
switch - case ๋ก detach, persistent ๋ฅผ ๊ตฌ๋ถํ๋ค.
detach
detach ์ํ(clear ํ ์ํ)๋ผ๋ฉด select ๋ฅผ ๋จผ์ ํด์ ์์์ฑ์ ์ ์ฅํ๋ค.
persistent
โ merge ์ธ ๊ฒฝ์ฐ์๋ cache ์ ๋ฃ์ด๋๊ธฐ๋ง ํ๊ณ ์ฟผ๋ฆฌ๊ฐ ์ค์ ๋ก ๋๊ฐ์ง๋ ์๋๋ค.
flush ๋ ๋ํฐ์ฒดํน ์์ ์์ ์ฟผ๋ฆฌ๊ฐ ๋ฐ์ํ๋๋ฏ!
cascade ๋?
AbstractSaveEventListener ์ performSaveOrReplicate() ์ ์ํํ ๋
โข
ํด๋น entity ์ ์ cascade ํด์ผ ํ๋ฉด cascadeBeforeSave()
โข
ํด๋น entity save ๋ addInsertion()
โข
ํด๋น entity ํ์ cascade ํด์ผ ํ๋ฉด cascadeAfterSave()
flush event listener ์์
LinkedHashMap<Class<? extends Executable>,ListProvider> EXECUTABLE_LISTS_MAP
๋งํฌ๋ํด์๋งต์ผ๋ก ์์๊ฐ ์ ํด์ ธ ์๋ค!
static {} ์ผ๋ก ์์๋๋ก ๋ฃ๋๋ค
1.
์๋ id ๋ผ๋ฉด?
2.
๋ํฐ์ฒดํน์?