๐Ÿ“‚ORM:JPA

๊ฐ’ ํƒ€์ž…, ๊ฐ’ ํƒ€์ž… ์ปฌ๋ž™์…˜

mc.thd 2023. 7. 10. 23:39

๊ฐ’ ํƒ€์ž… ์ˆ˜์ •

  • ๊ฐ’ ํƒ€์ž…์€ 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) + ๊ณ ์•„ ๊ฐ์ฒด ์ œ๊ฑฐ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ฐ’ ํƒ€์ž… ์ปฌ๋ž™์…˜ ์ฒ˜๋Ÿผ ์‚ฌ์šฉ