๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ‘ฉ‍๐Ÿ’ปTIL/JPA4

[JPA] N+1 ๋ฌธ์ œ ๋ฐœ์ƒ ์›์ธ๊ณผ ํ•ด๊ฒฐ๋ฐฉ๋ฒ• [JPA] N+1 ๋ฌธ์ œ ๋ฐœ์ƒ ์›์ธ๊ณผ ํ•ด๊ฒฐ๋ฐฉ๋ฒ• ๐Ÿ’ก ์›์ธ [JPA] ์˜์†์„ฑ ๊ด€๋ฆฌ, ์ค€์˜์† ์ƒํƒœ์™€ ์ง€์—ฐ ๋กœ๋”ฉ, N+1 ๋ฌธ์ œ ๋ฐœ์ƒ ์›์ธ JPA๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐœ๋ฐœํ•  ๋•Œ, ์„ฑ๋Šฅ์ƒ ์ฃผ์˜ํ•ด์•ผ ํ•  ๊ฒƒ์ด N+1 ๋ฌธ์ œ์ด๋‹ค. ๐Ÿ“Œ ์ฆ‰์‹œ ๋กœ๋”ฉ๊ณผ N+1 ์ผ๋ฐ˜์ ์œผ๋กœ ์ œ๊ณต๋˜๋Š” find() ๋ฉ”์†Œ๋“œ ๋“ฑ์„ ์‚ฌ์šฉํ•  ๋•Œ๋Š” jpa๊ฐ€ ๋‚ด๋ถ€์ ์œผ๋กœ join๋ฌธ์— ๋Œ€ํ•œ ์ฟผ๋ฆฌ๋ฅผ ๋งŒ๋“ค์–ด์„œ ๋ฐ˜ํ™˜์„ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฆ‰์‹œ ๋กœ๋”ฉ์ด ํฐ ๋ฌธ์ œ๊ฐ€ ์—†์–ด ๋ณด์ด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ JPQL์„ ์‚ฌ์šฉํ•  ๋•Œ, ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. JPA๋Š” JPQL์„ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ๊ธ€๋กœ๋ฒŒ ํŽ˜์น˜ ์ „๋žต์„ ์ฐธ๊ณ ํ•˜์ง€ ์•Š๊ณ  ์˜ค์ง JPQL ๋งŒ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์ฆ‰์‹œ ๋กœ๋”ฉ / ์ง€์—ฐ ๋กœ๋”ฉ ๊ตฌ๋ถ„ ์—†์ด ์ฟผ๋ฆฌ๋ฌธ๋งŒ ๋”ฐ๋ฅด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. List classrooms = em.createQuery("select c from Classr.. 2022. 8. 31.
[JPA] ์˜์†์„ฑ ๊ด€๋ฆฌ, ์ค€์˜์† ์ƒํƒœ์™€ ์ง€์—ฐ๋กœ๋”ฉ, N+1 ๋ฌธ์ œ ๋ฐœ์ƒ ์›์ธ [JPA] ์˜์†์„ฑ ๊ด€๋ฆฌ, ์ค€์˜์† ์ƒํƒœ์™€ ์ง€์—ฐ ๋กœ๋”ฉ, N+1 ๋ฌธ์ œ ๋ฐœ์ƒ ์›์ธ ๐Ÿ’ก ๋“ค์–ด๊ฐ€๋ฉด์„œ ์Šคํ”„๋ง ํ™˜๊ฒฝ์—์„œ JPA๋ฅผ ์‚ฌ์šฉํ• ๋•Œ, ํŠธ๋žœ์žญ์…˜ ๋ฒ”์œ„์˜ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ ์ „๋žต์ด ๊ธฐ๋ณธ์œผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค. ์ด๋ฆ„ ๊ทธ๋Œ€๋กœ, ํŠธ๋žœ์žญ์…˜์˜ ๋ฒ”์œ„๊ฐ€ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์˜ ์ƒ์กด ๋ฒ”์œ„๊ฐ€ ๊ฐ™๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค. ํŠธ๋žœ์žญ์…˜์„ ์‹œ์ž‘ํ• ๋•Œ, ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ๊ฐ€ ์ƒ์„ฑ๋˜๋ฉฐ, ๋๋‚  ๋•Œ ์ข…๋ฃŒํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ฐ™์€ ํŠธ๋žœ์žญ์…˜ ์•ˆ์—์„œ๋Š” ํ•ญ์ƒ ๊ฐ™์€ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์— ์ ‘๊ทผํ•œ๋‹ค. ๋”๋ณด๊ธฐ ์ถ”๊ฐ€ ๊ทธ๋ž˜์„œ ํŠธ๋žœ์žญ์…˜์ด ๋‹ค๋ฅด๋ฉด ๋‹ค๋ฅธ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ์—์„œ ๋™์‹œ์— ์š”์ฒญ์ด ์™€์„œ ๊ฐ™์€ ์—”ํ‹ฐํ‹ฐ ๋งค๋‹ˆ์ €๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ํ•ด๋„, ํŠธ๋žœ์žญ์…˜์— ๋”ฐ๋ผ ์ ‘๊ทผํ•˜๋Š” ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ๊ฐ€ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ ์ƒํ™ฉ์—์„œ ์•ˆ์ „ํ•˜๋‹ค. ์Šคํ”„๋ง์—์„œ๋Š” ํŠธ๋žœ์žญ์…˜๊ณผ ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ ์ƒํ™ฉ์„ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ฒ˜๋ฆฌํ•ด์ฃผ์–ด, ๊ฐœ๋ฐœ์ž.. 2022. 8. 31.
[hibernate]org.hibernate.HibernateException: No Session found for current thread ์—๋Ÿฌ ํ•ด๊ฒฐ org.hibernate.HibernateException: No Session found for current thread ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๊ฒฝ์šฐ ๋†’์€ ํ™•๋ฅ ๋กœ @Transactional์ด ๋น ์ง„ ์ƒํƒœ์ด๋‹ค. ๋”ฐ๋ผ์„œ, service๋‚˜ ํ•ด๋‹น ๋ฉ”์†Œ๋“œ๊ฐ€ ๊ฑฐ์ณ๊ฐ€๋Š” ํด๋ž˜์Šค์— ์•„๋ž˜์™€ ๊ฐ™์ด @Transactional ์–ด๋…ธํ…Œ์ด์…˜์„ ์ถ”๊ฐ€ํ•ด์ฃผ๋ฉด ํ•ด๋‹น ์—๋Ÿฌ๊ฐ€ ํ•ด๊ฒฐ๋œ๋‹ค. 2020. 9. 4.
[JPA/Hibernate] Restrictions ๋‹ค์ค‘ ์กฐ๊ฑด ์„ค์ •ํ•˜๊ธฐ [JPA/Hibernate] Restrictions ๋‹ค์ค‘ ์กฐ๊ฑด ์„ค์ •ํ•˜๊ธฐ ์ตœ๊ทผ Groovy&Grails๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ JPA ORM ๊ณผ ์œ ์‚ฌํ•œ GORM์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค. GORM์ด๋ž€? GORM๊ณผ ORM์€ ๊ธฐ๋ณธ ๋ฌธ๋ฒ•์ด๋‚˜, ํฐ ํ‹€์ด ๊ฑฐ์˜ ์œ ์‚ฌํ•˜๋‹ค. ํ•˜์ด๋ฒ„๋„ค์ดํŠธ ์ฟผ๋ฆฌ๋ฌธ์„ ์ž‘์„ฑํ•˜๋Š” ๊ณผ์ •์—์„œ ์กฐ๊ฑด์„ 2๊ฐœ ์„ค์ •ํ• ๋•Œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ๋Š”๋ฐ ์›ํ•˜๋Š” equal ์กฐ๊ฑด์„ ๋‹ด์€ ๋‹ค์Œ and๋กœ ์—ฐ๊ฒฐํ•˜๋‹ˆ ์ฟผ๋ฆฌ๊ฐ€ ์•„์ฃผ ์ž˜ ๋Œ์•„๊ฐ”๋‹ค๐Ÿ˜‚ 1. ๋จผ์ € Criterion์œผ๋กœ eq ์กฐ๊ฑด์„ ๋‹ด์•„์ค€๋‹ค. Criterion period = Restrictions.eq('period', searchPeriod) Criterion type = Restrictions.eq('type', searchType) Criterion username = Restrictio.. 2020. 8. 5.