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.
λν°μ²΄νΉμ?