๐พORM:JPA
@Transactional JPA๋ฅผ ์ฌ์ฉํ๋ฉด ํญ์ ํธ๋์ญ์
์์์ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํด์ผ ํ๋ค. ํธ๋์ญ์
์์ด ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ๋ฉด ์์ธ๊ฐ ๋ฐ์ @Transactional(readOnly=true) ์กฐํํ๋ ๊ณณ(์ฝ๊ธฐ ๋์)์ ์์ฑํด์ฃผ๋ฉด ์ฑ๋ฅ์ ์ต์ ํ ํ ์ ์์ ์ฐ๊ธฐ์์๋ X ํด๋์ค ์ต์๋จ์ @Transactional(readOnly=true) ๋ฅผ ์ ์ด์ฃผ๊ณ , ์ฐ๊ธฐํ๋ ๊ณณ์๋ @Transactional์ ์ ์ด์ฃผ๋ ๋ฐฉ์์ผ๋ก ๊ตฌํ ํ์
๐พORM:JPA
๋ค๋์ผ ์ฐ๊ด๊ด๊ณ์์ @JoinColumn(name) ์ปฌ๋ผ ์ด๋ฆ ๋งคํ์ ์ฌ์ฉ๋๋ ์ด๋
ธํ
์ด์
์ฐ๊ด๊ด๊ณ์๋ ์๋ฌด๋ฐ ์ํฅ์ด ์๋ค ์กฐ์ธ ๋์ ์ปฌ๋ผ์ ๋ณ๊ฒฝํ๊ธฐ ์ํด @JoinColumn(referencedColumnName)์ ํ์ฉํ ์ ์๋ค! ๋ฐ๋ผ์ ๋ฌด์กฐ๊ฑด @JoinColumn์ ์๋ตํด์ ์๋๋ค ์ผ๋๋ค ๋จ๋ฐฉํฅ ์ฐ๊ด๊ด๊ณ์์ @JoinColumn @JoinColumn ์ด๋
ธํ
์ด์
์ ๊ผญ ๋ช
์ํด์ค์ผ ํ๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ์ค๊ฐ ํ
์ด๋ธ์ ์๋์ผ๋ก ์์ฑํจ ์ผ๋๋ค ์๋ฐฉํฅ ์ฐ๊ด๊ด๊ณ์์ @JoinColumn ์ฐ๊ด๊ด๊ณ์ ์ฃผ์ธ์ ์ผ(1)์๊ฒ ์ฃผ๋ ค ํ๋ ๊ฒฝ์ฐ ๋ค(N)์ชฝ์ @JoinColumn(insertable=false, updateable=false)๋ฅผ ์ฌ์ฉํ๋ฉด ์ฐ๊ด๊ด๊ณ์ ์ฃผ์ธ์ ๊ฐ์ ์ํฌ ์ ์๋ค. ์ฐธ๊ณ : https://hyeon9..
๐พORM:JPA
JPA๋ ๋ค์ํ ์ฟผ๋ฆฌ ๋ฐฉ๋ฒ์ ์ง์ํ๋ค JPQL (๊ฑฐ์ ๋๋ถ๋ถ JPQL๋ก ํด๊ฒฐ) QueryDSL ๋ค์ดํฐ๋ธ SQL JDBC API ์ง์ ์ฌ์ฉ, MyBatis, SpringJdbcTemplate ๊ณผ ํจ๊ป ์ฌ์ฉ JPQL์ด๋? : ๊ฐ์ฒด์งํฅ SQL JPA๋ SQL์ ์ถ์ํํ JPQL์ด๋ผ๋ ๊ฐ์ฒด ์งํฅ ์ฟผ๋ฆฌ ์ธ์ด(ํ
์ด๋ธ์ด ์๋ ๊ฐ์ฒด๋ฅผ ๋์์ผ๋ก ๊ฒ์)๋ฅผ ์ ๊ณต SQL๊ณผ ๋ฌธ๋ฒ ์ ์ฌ, SELECT, FROM, WHERE, GROUP BY, HAVING, JOIN ์ง์ SQL์ ์ถ์ํํด์ ํน์ ๋ฐ์ดํฐ๋ฒ ์ด์ค SQL์ ์์กดX JPQL์ ๊ฒฐ๊ตญ SQL๋ก ๋ณํ๋๋ค ํ๋ก์ ์
(SELECT) SELECT m FROM Member m : ์ํฐํฐ ํ๋ก์ ์
๊ฒฐ๊ณผ๋ก ๋์จ ์ฌ๋ฌ๊ฐ์ ์ํฐํฐ๊ฐ ์ ๋ถ ์์์ฑ ์ปจํ
์คํธ์์ ๊ด๋ฆฌ๊ฐ ๋๋ค ์๋ ์ฝ๋๋ฅผ ๋ณด๋ฉด up..
๐พORM:JPA
๊ฐ ํ์
์์ ๊ฐ ํ์
์ immutable ํด์ผ ํจ ๊ฐ ํ์
์ setter๋ก ์์ ํ๋ฉด ์๋จ update๋ฌธ์ด ๋๊ฐ์ง๋ง side effect๋ฅผ ์ผ์ผํฌ ์ ์์ Member findMember = em.find(Member.class,member.getId()); // ๊ฐํ์
Address์ homeCity ๋ฅผ newCity๋ก ๋ฐ๊พธ๊ณ ์ถ์ findMember.getHomeAddress().setCity("newCity"); // ์ด๋ ๊ฒ ํ๋ฉด ์๋จ ์๋์ ๊ฐ์ด ์๋ก์ด Address๋ก ๊ฐ์๋ผ์์ผ ํ๋ค // ๊ฐํ์
Address์ homeCity ๋ฅผ newCity๋ก ๋ฐ๊พธ๊ณ ์ถ์ Address a = findMember.getHomeAddress(); findMember.setHomeAddress(new Addres..
๐พORM:JPA
์ฐ๊ด๋ ์ํฐํฐ๊ฐ ํ๋๋ฉด ์ฆ์ ๋ก๋ฉ ์ปฌ๋ ์
์ด๋ฉด ์ง์ฐ ๋ก๋ฉ์ ์ฌ์ฉ ์ด๋
ธํ
์ด์
default @ManyToOne, @OneToOne ์ฆ์ ๋ก๋ฉ(FetchType.EAGER) @OneToMany, @ManyToMany ์ง์ฐ ๋ก๋ฉ(FetchType.LAZY) ManyToMany๋ ์ฐ์ง ๋ง์ ์ค๋ฌด์์ ์ง์ฐ ๋ก๋ฉ๋ง ์ฌ์ฉํ์ ์ฆ์ ๋ก๋ฉ์ ํ๋ฉด ์์์น ๋ชปํ SQL์ด ๋ฐ์ ์ฆ์ ๋ก๋ฉ์ JPQL์์ N+1 ๋ฌธ์ ๋ฅผ ์ผ์ผํจ๋ค. @ManyToOne, @OneToOne์ ๊ธฐ๋ณธ์ด ์ฆ์ ๋ก๋ฉ ๐ LAZY๋ก ์ค์ ๋ชจ๋ ์ฐ๊ด๊ด๊ณ์ ์ง์ฐ ๋ก๋ฉ์ ์ค์ ํ ๋ค JPQL fetch์กฐ์ธ์ด๋, ์ํฐํฐ ๊ทธ๋ํ ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ ์ฆ์๋ก๋ฉ์ ์์ํ์ง ๋ชปํ ์ฟผ๋ฆฌ๊ฐ ๋๊ฐ๋ค