๋ฐ์ํ ๊ฐ๋ฐ/JPA5 [JPA] Specification์ ์ด์ฉํ์ฌ ์ฟผ๋ฆฌ ์กฐ๊ฑด ์ฒ๋ฆฌํ๊ธฐ - ์ธ๋ํค Specification Repository์ JpaSpecificationExecutor ์ธํฐํ์ด์ค๋ฅผ ์์๋ฐ์ผ๋ฉด Specification์ ์ฌ์ฉํ ์ ์๋ค. @Repository public interface GrandChildRepository extends JpaRepository, JpaSpecificationExecutor { } โป์ฐธ๊ณ : ๋ณตํฉํค์ด๊ธฐ ๋๋ฌธ์ JpaRepository๋ฅผ ์์๋ฐ์ ๋ ID๋ถ๋ถ์ Id class๋ฅผ ๋ฃ์ด์ฃผ๋ฉด ๋๋ค. ๊ด๋ จ ๋ด์ฉ์ ์๋ ํฌ์คํ ์ ์ฐธ๊ณ ํ์ [JPA] ๋ณตํฉํค, ์ธ๋ํค Entity ์ค์ ํ๊ธฐ(@IdClass๋ฅผ ์ฌ์ฉํ์ฌ ์๋ณ๊ด๊ณ ๋งคํ) ์ฌํด ์ด ๋ณตํฉํค, ์ธ๋ํค ์ฌ์ฉ์ด ๋ง์ ํ ์ด๋ธ์ JPA Entity๋ก ๊ตฌํํ์ด์ผ ํ๋๋ฐ, JPA ์ฌ์ฉ์ด ์ฒ์์ด์์ด์ ์ต์ํ์ง ์์ ๋ณต.. 2022. 1. 7. [JPA] ๋ณตํฉํค, ์ธ๋ํค Entity ์ค์ ํ๊ธฐ(@IdClass๋ฅผ ์ฌ์ฉํ์ฌ ์๋ณ๊ด๊ณ ๋งคํ) ์ฌํด ์ด ๋ณตํฉํค, ์ธ๋ํค ์ฌ์ฉ์ด ๋ง์ ํ ์ด๋ธ์ JPA Entity๋ก ๊ตฌํํ์ด์ผ ํ๋๋ฐ, JPA ์ฌ์ฉ์ด ์ฒ์์ด์์ด์ ์ต์ํ์ง ์์ ๋ณต์กํ๊ฒ ๋๊ปด์ก์๋ค. ๋๊ฐ์ ์ฌ๋์ ์ํด ์ ๋ฆฌํด ๋ณธ๋ค! Entity์ ๋ณตํฉํค๋ฅผ ํตํ ์๋ณ๊ด๊ณ๋ฅผ ๋งคํํ๋ ๋ฐฉ๋ฒ์ @IdClass, @EmbededId ๋๊ฐ์ง๊ฐ ์๋๋ฐ ๋ณธ์ธ์ @IdClass๋ฅผ ์ฌ์ฉํ๋ค. @EmbededId๋ @IdClass ๋ฐฉ์ ๋ณด๋ค ์ข๋ ๊ฐ์ฒด์งํฅ ๋ฐฉ์์ด๋ผ๊ณ ํ๋ค. ํ์ง๋ง ํน์ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์ ๊ฐ์ฒด ๊ทธ๋ํ๋ฅผ ๊น๊ฒ ํ์ํด์ผํ๋ ๊ฒฝ์ฐ๊ฐ ์๊ณ , ๊น์ด ๊ฐ์ถฐ์ ธ ์์ด์ ๋ช ์์ ์ผ๋ก ๋ณด์ด์ง ์๋๋ค๊ณ .. ์๋ฅผ ๋ค์ด grandChild Entity์์ parent_id๋ฅผ ๊ตฌํ๊ธฐ ์ํด์ ์๋์ ๊ฐ์ด ํ์ํด์ผ ํ๋ค. grandChild.getGId().getCId().getPI.. 2021. 12. 23. [JPA] @OnDelete VS cascade = CascadeType.REMOVE ๊ด๊ณํ DB์ ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ ๋ ์ฌ์ฉํ๋ @OnDelete์ cascade = CascadeType.REMOVE์ ์ฐจ์ด๋ฅผ ์์๋ณด์! @OnDelete DDMS ๋ ๋ฒจ์์ ์๋ @OnDelete(action = OnDeleteAction.CASCADE) DDL ์์ฑ์ cascade ์ ์ฝ ์กฐ๊ฑด์ด ์์ฑ ๋จ. ์ฌ๊ธฐ์ DDL์ด๋ Data Definition Language๋ก ๋ฐ์ดํฐ ๋ฒ ์ด์ค๋ฅผ ์ ์ํ๋ ์ธ์ด์ด๋ฉฐ, CREATE, ALTER, DROP, TRUNCATE๋ฅผ ๋งํ๋ค. casecade=CascadeType.REMOVE JPA ๋ ๋ฒจ์์ ์๋ JPA๊ฐ ๋ถ๋ชจ ์ํฐํฐ๋ฅผ ์ญ์ ํ ๋ ์ฐ๊ด๋ ์์ ๋ฐ์ดํฐ์ ๋ํ DELETE ์ฟผ๋ฆฌ๋ฅผ ์คํ ํจ ๋ณธ์ธ์ ๊ฒฝ์ฐ ๋ถ๋ชจ์ ์์์ 1:N ๊ด๊ณ์ผ ๋ ์๋ ์๊ตฌ์ฌํญ์ ์ถฉ์กฑ์์ผ์ผ ํ๋ค. ์๊ตฌ.. 2021. 12. 13. [JPA] ๋ฐ์ดํฐ๋ฅผ insert ํ๊ธฐ ์ ์ selectํ๋ ์ด์ JPA๋ฅผ ์ด์ฉํ์ฌ DB์ ๋ฐ์ดํฐ๋ฅผ insertํ๊ฒ ๋๋ฉด id๋ฅผ ์กฐ๊ฑด์ผ๋ก select๋ฅผ ๋จผ์ ํ๊ณ , insert๋ฅผ ํ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค. (JPA๋ ์กฐํ ํ ๋ฐ์ดํฐ๊ฐ ์กด์ฌํ๋ค๋ฉด update๋ฅผ ์คํํ๊ณ ์กด์ฌํ์ง ์์ผ๋ฉด insert๋ฅผ ์คํํ๋ค.) ๋๋ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ค๋ค ๋ณด๋ savaAll์ ์ฌ์ฉํ๊ฒ ๋์๋๋ฐ, xxxRepository.saveAll(entity); 1000๊ฑด์ ๋ฐ์ดํฐ๋ฅผ ํ๋ฒ์ ๋ฑ๋กํ๋ ค๋ฉด select๋ฅผ 1000๋ฒ ์คํํ๋..... JPA๊ฐ ํธ๋ฆฌํ๊ธด ํ๋ฐ.. ์ด๋ฐ ๋ถ๋ถ์.. ์ฐธ ๊ทธ๋ ๋ค ๊ทธ๋์ save() ๋ฉ์๋๊ฐ ์ด๋ป๊ฒ ์ฒ๋ฆฌ๋๊ณ ์๋์ง ์ดํด๋ดค๋ค. @Transactional public S save(S entity) { if (entityInformation.isNew(entity)) { e.. 2021. 12. 2. [JPA] @OneToMany - ์์ ํ ์ด๋ธ(๊ด๊ณ Entity)์ ๋ฐ์ดํฐ๋ฅผ ์ํฉ์ ๋ฐ๋ผ ๊ฐ์ ธ์ค๊ธฐ JPA๋ฅผ ์ฌ์ฉํ๋ค ๋ณด๋ฉด LAZY ํจ์นํ์ ์ผ๋ก relation์ด ๋ฌ๋ ค ์๋ ์ํฐํฐ๋ฅผ ์กฐํํ ๋ n+1 ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค. ์ด๋ด ๋๋ @EntityGrapth๋ง ๋ฌ์์ฃผ๋ฉด joinํ์ฌ ํ๋ฒ์ selectํ ์ ์๋ค. ์๋๋ ์์์ด๋ค. Product ํ ์ด๋ธ๊ณผ Sample ํ ์ด๋ธ์ 1:N ๊ด๊ณ์ด๋ค. ๋ฐ๋ผ์ sampleList์ @OneToMany ์ด๋ ธํ ์ด์ ์ ์ค์ ํด์ฃผ์๋ค. (๋ฐ๋๋ก Sample ์ํฐํฐ์ Product๋ฅผ @ManyToOne ์ค์ ํด์ฃผ์ด๋ ๋๋ค) @Entity @ToString @Table(name = "PRODUCT") public class Product{ @Id @Column(name = "PRODUCT_ID", columnDefinition ="VARCHAR(36)") private .. 2021. 11. 26. ์ด์ 1 ๋ค์ 728x90 ๋ฐ์ํ