์ฒ์์ผ ๋
SessionImpl ์์ fireLoad() ๋ฅผ ํ๋ค.
fireLoad() ์์ fireLoadNoChecks() ๋ฅผ ์ํํ๋ค.
fireLoadNoChecks() ์์ fastSessionServices.eventListenerGroup_LOAD.fireEventOnEachListener( event, loadType, LoadEventListener::onLoad ); ๋ฅผ ํธ์ถํ๋ค.
fireEventOnEachListener() ๋ EventListenerGroupImpl ์ ๋ฉ์๋์ด๊ณ , eventType ์ load ์ด๋ค.
๋ฑ๋ก๋ listener ๋ค์ ํ์ธํ๋๋ฐ DefaultLoadEventListener ๋ฐ์ ์๋ค.
LoadEventListener::onLoad ๋ฅผ ํธ์ถํ๋ค.
DefaultLoadEventListener
onLoad() ์์๋ persister(๋ฐํ ๊ฐ์ฒด) ๋ฅผ ์ฐพ๊ณ doOnLoad() ํธ์ถ
doOnLoad() ์์๋ persister ์ identifier ๋ฅผ ๊ฐ์ง entityKey ๋ฅผ ์ฐพ๊ณ proxyOrLoad() ํธ์ถ
proxy ์ธ์ง ํ์ธํ๊ณ return a newly loaded object ์ด๋ฉด load() ๋ฅผ ํธ์ถ
load() ์์ doLoad() ํธ์ถ
doLoad() ์์ 1์ฐจ ์บ์(SessionCache), 2์ฐจ ์บ์(SecondLevelCache) ํ์ธ ํ ์์ผ๋ฉด loadFromDatasource() ํธ์ถ
loadFromDatasource() ์์ persister.load() ์ํ
AbstractEntityPersister
load() ์์ doLoad() ์ํ โ ๋ ๋ฉ์๋ ๋ค parameter ๋๊ฐ์;; ๊ทธ๋ผ ์ load() ๋ฅผ ํธ์ถํ๋๊ฑฐ์ง;;
getAppropriateLoader() ๋ฅผ ํธ์ถํ์ฌ EntityLoader ์ฐพ๊ณ EntityLoader ์๊ฒ load() ํธ์ถ
Abstract~~Loader
load() ์์ QueryParameters ๊ฐ์ฒด ์์ฑํ๊ณ executeLoad() ํธ์ถ
executeLoad() ์์ ์ผ๋จ ์์์ฑ ์ปจํ
์คํธ์ beforeLoad() ๋ฉ์๋๋ฅผ ํตํด load count ๋ฅผ 1 ์ฆ๊ฐ์ํด
sql ์ ์ฒ๋ฆฌํ๊ณ prepareQueryStatement() ํธ์ถ
StatementPreparerImpl ์์ preparedStatement ์์ฑ
์์ฑ๋ ps ์ bind parameter ํจ
getResultSet() ํธ์ถํ๊ณ ํด๋น ๋ฉ์๋์์ extract() ํธ์ถ
extract() ๋ ResultSetReturnImpl ์ ๋ฉ์๋์ด๊ณ ์ฌ๊ธฐ์ ps ์ JdbcPreparedStatement ์ executeQuery() ๋ฉ์๋ ํธ์ถ!!
DefaultLoadEventListener ์ 67๋ฒ์ค primitive ๋ผ๋ฉด ์ด๋จ์ง ํ์ธ, 61๋ฒ getPersister() ํ์ธ
์์์ฑ ์ปจํ ์คํธ์ ์์ ๋
DefaultLoadEventListener ์ doOnLoad() 1์ฐจ ์บ์(SessionCache) ํ์ธํ๊ธฐ ์ํด
CacheEntityLoaderHelper.INSTANCE.loadFromSessionCache(
event,
keyToLoad,
options
); ํธ์ถ
loadFromSessionCache() ์์ session.getEntityUsingInterceptor( keyToLoad ); ํธ์ถ
getEntityUsingInterceptor() ์์ persistenceContext.getEntity( key ); ํธ์ถ key ๋ EntityKey ๊ฐ์ฒด
๊ทธ๋ผ StatefulPersistenceContext ์ entitiesByKey(HashMap) ์์ key ๋ก ํ์ธ