@Converter ์ปจ๋ฒํฐ๋ฅผ ์ฌ์ฉํ๋ฉด ์ํฐํฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ณํ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํ ์ ์๋ค. ์๋ฅผ ๋ค์ด์ ํ์์ VIP์ฌ๋ถ๋ฅผ ์๋ฐ์ boolean ํ์
์ ์ฌ์ฉํ๊ณ ์ถ๋ค๊ณ ํ์. JPA๋ฅผ ์ฌ์ฉํ๋ฉด ์๋ฐ์ boolean ํ์
์ ๋ฐฉ์ธ์ ๋ฐ๋ผ ๋ค๋ฅด๊ฒ ์ง๋ง, ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ๋ ๋ 0 ๋๋ 1๋ก ์ ์ฅ๋๋ค. ๊ทธ๋ฐ๋ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ซ์ ๋์ Y ๋๋ N์ผ๋ก ์ ์ฅํ๊ณ ์ถ์ผ๋ฉด ์ด๋ป๊ฒ ํด์ผํ ๊น? ๊ทธ๋ด ๋ ์ฌ์ฉํ ์ ์๋ ๊ฒ์ด ๋ฐ๋ก ์ปจ๋ฒํฐ๋ค. ์ฌ์ฉ @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) @Entity public class Member { @Id @GeneratedValue @Column(name = "MEMBER_ID") private Long id; ..
๐๏ธ Spring
์ปฌ๋ ์
JPA์์๋ ์๋ฐ์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณตํ๋ Collection, List, Set, Map ์ปฌ๋ ์
์ ์ง์ํ๊ณ ๋ค์ ๊ฒฝ์ฐ์ ์ด ์ปฌ๋ ์
์ ์ฌ์ฉํ ์ ์๋ค. @OneToMany, @ManyToMany ๋ฅผ ์ฌ์ฉํด์ '์ผ๋๋ค' ํน์ '๋ค๋๋ค' ์ํฐํฐ ๊ด๊ณ๋ฅผ ๋งคํํ ๋. @ElementCollection์ ์ฌ์ฉํด์ ๊ฐ ํ์
์ ํ๋ ์ด์ ๋ณด๊ดํ ๋ ์ฐ์ ์๋ฐ ์ปฌ๋ ์
์ธํฐํ์ด์ค์ ํน์ง์ ๊ฐ๋จํ ์ดํด๋ณด๊ณ ๊ฐ์. ์๋ฐ ์ปฌ๋ ์
์ธํฐํ์ด์ค์ ํน์ง Collection : ์๋ฐ๊ฐ ์ ๊ณตํ๋ ์ต์์ ์ปฌ๋ ์
์ด๋ค. List : ์์๊ฐ ์๊ณ , ์ค๋ณต์ ํ์ฉํ๋ค. Set : ์์๊ฐ ์๊ณ , ์ค๋ณต์ ํ์ฉํ์ง ์๋๋ค Map : Key, Value๋ก ๋์ด์์ผ๋ฉฐ ํค๋ ์ค๋ณต์ ๋ถํํ๋ค. JPA์ ์ปฌ๋ ์
JPA ๋ช
์ธ์๋ ์๋ฐ ์ปฌ๋ ์
์ธํฐํ์ด์ค์ ๋..
@OrderBy @OrderColumn์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์์์ฉ ์ปฌ๋ผ์ ๋งคํํด์ ๊ด๋ฆฌํ๋ค๋ฉด, @OrderBy๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ORDER BY ์ ์ ์ฌ์ฉํด์ ์ปฌ๋ ์
์ ์ ๋ ฌํ๋ค. ๋ฐ๋ผ์ ์์์ฉ ์ปฌ๋ผ์ ๋งคํํ ํ์๋ ์๊ณ , ๋ํ @OrderBy๋ ๋ชจ๋ ์ปฌ๋ ์
์ ์ฌ์ฉํ ์ ์๋ค. ์ฌ์ฉ ๋ฐฉ๋ฒ์ ์์๋ณด์. @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) @Entity public class Member { @Id @GeneratedValue @Column(name = "MEMBER_ID") private Long id; @OneToMany(mappedBy = "member") @OrderBy("id asc, completedDate desc") private ..
์คํ๋ง์์ JPA๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ฉด ์คํ๋ง ์ปจํ
์ด๋๊ฐ ํธ๋์ญ์
๊ณผ ์์์ฑ ์ปจํ
์คํธ๋ฅผ ๊ด๋ฆฌํด์ฃผ๋ฏ๋ก ์ ํ๋ฆฌ์ผ์ด์
์ ์์ฝ๊ฒ ๊ฐ๋ฐํ ์ ์์ต๋๋ค. ๋น์ฐํ๊ฒ๋ ์ด๋ฌํ JPA์ ๋ด๋ถ ๋์์๋ฆฌ๋ฅผ ๋ชจ๋ฅด๊ณ ์ฌ์ฉํ๋ค๋ฉด ์ฌ๋ฌ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ ๋ ํด๊ฒฐํ๊ธฐ ์ด๋ ต์ต๋๋ค. ์ด๋ฒ ๊ธ์ ํตํด JPA๊ฐ ๋์ํ๋ ๋ด๋ถ ๋ฐฉ์์ ์ดํดํ๊ณ , ์ ํ๋ฆฌ์ผ์ด์
์ ๊ฐ๋ฐํ ๋ ๋ฐ์ํ ์ ์๋ ๋ค์ํ ๋ฌธ์ ์ ๊ณผ ํด๊ฒฐ ๋ฐฉ์์ ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค. ํธ๋์ญ์
๋ฒ์์ ์์์ฑ ์ปจํ
์คํธ ์คํ๋ง ์ปจํ
์ด๋์ ๊ธฐ๋ณธ ์ ๋ต์ 'ํธ๋์ญ์
๋ฒ์์ ์์์ฑ ์ปจํ
์คํธ' ์
๋๋ค. ์คํ๋ง์์ JPA๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ฉด, ์คํ๋ง ์ปจํ
์ด๋๊ฐ ์ ๊ณตํ๋ ์ ๋ต์ ๋ฐ๋ผ์ผ ํฉ๋๋ค. ์คํ๋ง ์ปจํ
์ด๋๋ JPA์ ์์์ฑ ์ปจํ
์คํธ๋ฅผ ์ง์ํ ๋, ๊ธฐ๋ณธ ์ ๋ต์ผ๋ก ํธ๋์ญ์
๋ฒ์์ ์์์ฑ ์ปจํ
์คํธ๋ฅผ ์ฌ์ฉํฉ๋๋ค. ํธ๋์ญ์
..
JPA์์ ์ฑ๋ฅ ์ต์ ํ๋ฅผ ํ๊ธฐ ์ํ ๋ช๊ฐ์ง ๋ฐฉ๋ฒ๋ค์ ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค. ๋ชจ๋ ์ฐ๊ด๊ด๊ณ๋ ์ง์ฐ๋ก๋ฉ ๋ชจ๋ ์ฐ๊ด๊ด๊ณ๋ FetchType.LAZY๋ฅผ ํตํ ์ง์ฐ๋ก๋ฉ์ผ๋ก ์ค์ ํด ์ฃผ์๋ ๊ฒ์ ๊ถ์ฅํฉ๋๋ค. ์ฆ์ ๋ก๋ฉ์ ์ฌ์ฉํ ๊ฒฝ์ฐ ์์ํ์ง ๋ชปํ ์ฟผ๋ฆฌ๊ฐ ๋ฐ์ํ ์ ์์ผ๋ฉฐ, ์ด๋ ์ต์ ํ๋ฅผ ๋ฐฉํดํ๋ ์์๊ฐ ๋ฉ๋๋ค. XToOne ๊ด๊ณ ํ์น ์กฐ์ธ์ ์ฌ์ฉํฉ๋๋ค. ToOne ๊ด๊ณ๋ฅผ ๋ชจ๋ ์ง์ฐ ๋ก๋ฉ์ผ๋ก ์ค์ ํ ์ดํ, ์กฐํํ๋ ์์ ์ ํ์น ์กฐ์ธ์ ํตํด ์กฐํํ๋ ๊ฒ์ผ๋ก ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์์ต๋๋ค. ToOne ๊ด๊ณ๋ ์กฐํ ์ row์๋ฅผ ์ฆ๊ฐ์ํค์ง ์๊ธฐ ๋๋ฌธ์, ์๋ฌด๋ฐ ๋ฌธ์ ์์ด ํ์ด์ง๋ ๊ฐ๋ฅํฉ๋๋ค. ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ ๋์๋ ์ํฐํฐ๋ก ์กฐํํ๋ ๋ฐฉ๋ฒ๊ณผ, DTO๋ก ๋ฐ๋ก ์กฐํํ๋ ๋ฐฉ๋ฒ์ ์ ํํ ์ ์์ต๋๋ค. ์ฑ๋ฅ์ ๊ทนํ์ผ๋ก ๋์ด์ฌ๋ฆฌ๋ ค๋ ๊ฒ์ด ..
๊ฐ๋ฐ์ ํ๋ค๋ณด๋ฉด ์ํ ๋ฐ์ดํฐ๋ฅผ ์
๋ ฅํด์ผํ ๊ฒฝ์ฐ๊ฐ ์๋ค. ๊ทธ๋ด ๋ @PostContructor๋ฅผ ์ฌ์ฉํ ์ ์๋๋ฐ ์ง๊ธ๋ถํฐ ๊ทธ ์ฌ์ฉ๋ฒ์ ์์๋ณด์. @Component @RequiredArgsConstructor public class InitDb { private final InitService initService; @PostConstruct public void init() { initService.doInit(); } @Component @Transactional @RequiredArgsConstructor static class InitService { private final EntityManager em; public void doInit(){ Member member = new Member()..
๋ณํฉ๊ณผ ๋ณ๊ฒฝ๊ฐ์ง JPA๋ฅผ ์ฌ์ฉํ ๋ ์ผ๋ฐ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒฝ์ฐ์๋ ๋๊ฐ์ง ๋ฐฉ๋ฒ์ด ์กด์ฌํฉ๋๋ค ํ๋๋ ๋ณ๊ฒฝ ๊ฐ์ง(Dirty Checking)์ ์ฌ์ฉํ๋ ๊ฒ์ด๊ณ , ๋ค๋ฅธ ํ๋๋ ๋ณํฉ (merge())๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ธ๋ฐ, ๋ณ๊ฒฝ ๊ฐ์ง๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๊ถ์ฅํฉ๋๋ค. ๋ณํฉ(merge)์ ๋์์๋ฆฌ ๋ณํฉ์ ์ฌ์ฉํ๋ค๋ฉด ์ฐ์ ํ๋ผ๋ฏธํฐ๋ก ๋์ด์จ ์ค์์ ์ํฐํฐ์ ์๋ณ์ ๊ฐ์ผ๋ก 1์ฐจ ์บ์์์ ์กฐํํฉ๋๋ค. ๋ง์ฝ 1์ฐจ์บ์์ ์ํฐํฐ๊ฐ ์๋ค๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ํฐํฐ๋ฅผ ์กฐํํ ํ 1์ฐจ ์บ์์ ์ ์ฅํฉ๋๋ค. ์กฐํํ ์์ ์ํฐํฐ์ merge(์๋ก์ด์ํฐํฐ) ์์ ๋ฃ์ด์ค '์๋ก์ด์ํฐํฐ'์ ๊ฐ์ ๋ฃ์ด์ค๋๋ค. ์ด๋ ๋น ๊ฐ์ ๋ฌด์ํ๋ ๊ฒ์ด ์๋๋ผ null๋ก ์ฑ์๋ฃ์ต๋๋ค. ๋ง์ฝ merge()์ ๋ค์ด๊ฐ ๊ฐ๋ค ์ค null ๊ฐ์ด ์๋ค๋ฉด ๊ทธ ๊ฐ์ด ๋ฌด์๋๊ณ ..
์คํ๋ง๋ถํธ ์ฌ์ฉ ์ EntityManagerFactory๋ฅผ ์ฃผ์
๋ฐ๋ ๋ฐฉ๋ฒ @PersistenceUnit ๋๋ ๊ทธ๋ฅ @Autowired๋ฅผ ์ฌ์ฉํด๋ ๋ฉ๋๋ค. ์ฌ์ฉ @PersistenceUnit private EntityManagerFactory emf; Reference ์ค์ ! ์คํ๋ง ๋ถํธ์ JPA ํ์ฉ1 - ์น ์ ํ๋ฆฌ์ผ์ด์
๊ฐ๋ฐ - ์ธํ๋ฐ | ๊ฐ์ ์ค๋ฌด์ ๊ฐ๊น์ด ์์ ๋ก, ์คํ๋ง ๋ถํธ์ JPA๋ฅผ ํ์ฉํด์ ์น ์ ํ๋ฆฌ์ผ์ด์
์ ์ค๊ณํ๊ณ ๊ฐ๋ฐํฉ๋๋ค. ์ด ๊ณผ์ ์ ํตํด ์คํ๋ง ๋ถํธ์ JPA๋ฅผ ์ค๋ฌด์์ ์ด๋ป๊ฒ ํ์ฉํด์ผ ํ๋์ง ์ดํดํ ์ ์์ต๋๋ค., ์คํ www.inflearn.com