๊ฐ ํ์ ์์
- ๊ฐ ํ์ ์ 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 Address("newCity",a.getStreet(),a.getZipcode()));
๊ฐ ํ์ ์ปฌ๋์
- ๊ฐ ํ์ ์ปฌ๋์ ์ ๋งคํํ๋ ํ ์ด๋ธ์ ๋ชจ๋ ์ปฌ๋ผ์ ๋ฌถ์ด์ ๊ธฐ๋ณธํค๋ฅผ ๊ตฌ์ฑํด์ผ ํจ : null ์ ๋ ฅX, ์ค๋ณต ์ ์ฅX
๊ฐ ํ์ ์ปฌ๋์ ์์
- removeํ ํ add ํด์ค์ผ ํจ
// ์นํจ -> ํ์
findMember.getFavoriteFoods().remove("์นํจ");
findMember.getFavoriteFoods().add("ํ์");
findMember.getAddressHistory().remove(new Address("old1","street","10000"));
findMember.getAddressHistory().add(new Address("newCity1","street","10000"));
- ์ ํํ remove๋ฅผ ํ๊ธฐ ์ํด์ ์๋์ ๊ฐ์ด Address์ equals์ hash์ฝ๋๊ฐ ์์ฑ๋์ด ์์ด์ผ ํ๋ค.
๊ฐ ํ์ ์ปฌ๋ ์ ์ ๋ณ๊ฒฝ ์ฌํญ์ด ๋ฐ์ํ๋ฉด, ์ฃผ์ธ ์ํฐํฐ์ ์ฐ๊ด๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ๊ณ , ๊ฐ ํ์ ์ปฌ๋ ์ ์ ์๋ ํ์ฌ ๊ฐ์ ๋ชจ๋ ๋ค์ ์ ์ฅํ๋ค.
๊ฐ ํ์ ์ปฌ๋์ ๋์
- ์ค๋ฌด์์ ๊ฐ ํ์
์ ๊ฐ์ง๋
Entity
๋ฅผ ๋ง๋ค๊ณ ์ผ๋๋ค ๊ด๊ณ๋ฅผ ํ์ฉํ๋ค. - ์์์ฑ ์ ์ด(Cascade) + ๊ณ ์ ๊ฐ์ฒด ์ ๊ฑฐ๋ฅผ ์ฌ์ฉํด์ ๊ฐ ํ์ ์ปฌ๋์ ์ฒ๋ผ ์ฌ์ฉ
'๐ORM:JPA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ณ๊ฒฝ ๊ฐ์ง์ ๋ณํฉ (0) | 2023.07.18 |
---|---|
@Transactional (0) | 2023.07.15 |
@JoinColumn (0) | 2023.07.13 |
JPA ์ฟผ๋ฆฌ ( JPQL ) (0) | 2023.07.11 |
์ฆ์ ๋ก๋ฉ๊ณผ ์ง์ฐ ๋ก๋ฉ (0) | 2023.07.06 |