Equals, HashCode in Jpa Entity
์ด ๊ธ์ ํ์ June ์์ฑํ์ต๋๋ค.
ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๋ ๋์ค, ๋ ์ํฐํฐ๊ฐ ๊ฐ์์ง ๋น๊ตํ๋ ์ฝ๋๊ฐ ๋ง์ Java์์ ์ฐ์ด๋ Equals, hahscode๊ฐ Jpa์์ ์ด๋ป๊ฒ ์ฌ์ฉ๋ ์ ์๋์ง ์์๋ณด์์ต๋๋ค.
๊ฐ์ ํ๋๋ฅผ ์ง๋๊ณ ์๋ค๊ณ ํด์ member == member2 ์ผ๊น์?
equals, hashcode๋ฅผ override๋ฅผ ํ์ง ์์๋ค๋ฉด member, member2 ๊ฐ๊ฐ์ ์ธ์คํด์ค๋ฅผ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์ ์ ํ ์คํธ๋ ํต๊ณผํ์ง ์์ต๋๋ค.
Jpaํ๊ฒฝ์์๋ ์์๋ณด๊ณ ์ถ๊ธฐ ๋๋ฌธ์ ์์์ฑ ์ปจํ ์คํธ ์์์ ๊ด๋ฆฌ๋ ๋ ํ์ธํด๋ณด๊ฒ ์ต๋๋ค.
์ ์ฝ๋๋ฅผ ๋ณด๋ฉด ์ด๋ค ๊ฒฐ๊ณผ๊ฐ ๋์ฌ๊น์?
member, member2๋ ์์์ฑ ์ปจํ ์คํธ์์ ๊ด๋ฆฌ๋๊ธฐ ๋๋ฌธ์ ์ฐธ์กฐ๊ฐ์ผ๋ก ๊ฐ์ ์ธ์คํด์ค์ธ์ง ํ์ธ์ด ๊ฐ๋ฅํฉ๋๋ค. ๋ฐ๋ผ์ ํ ์คํธ๋ฅผ ํต๊ณผํฉ๋๋ค.
์์์ฑ ์ปจํ ์คํธ์์ ๊ด๋ฆฌ๋์ง ์๋ member๋ ์ด๋ป๊ฒ ๋ ๊น์?
์ ํ
์คํธ๋ ์คํจํฉ๋๋ค. em.detach(member)๋ก member๋ ์ค์์ ์ํ์ด๊ธฐ ๋๋ฌธ์ member2์ ๋ค๋ฅธ ์ฐธ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค. member.getNickname() == member2.getNickname()
๋ True์
๋๋ค.
equals(), hashcode()
์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ 3๊ฐ์ง๊ฐ ์์ต๋๋ค.
PK๋ก๋ง equals, hashCode ๊ตฌํ
PK๋ฅผ ์ ์ธํ๊ณ equla๋ก ๊ตฌํ
๋น์ง๋์ค ํค๋ฅผ ์ฌ์ฉํ ๋๋ฑ์ฑ ๊ตฌํ
1. PK๋ก๋ง equls, hashCode ๊ตฌํํ๊ธฐ
์ ์ฝ๋๋ Object๊ฐ Member์ธ์ง ํ์ธ ํ, pk์ธ Id๋ฅผ ๋น๊ตํ์ฌ ๋๋ฑ์ฑ์ ๋น๊ตํ๋ ์ฝ๋์ ๋๋ค.
์ด ๋ฐฉ๋ฒ์ repository.save() ์ฆ PK๊ฐ ์ง์ ๋ ํ์๋ง ๋น๊ตํ ์ ์๋ ๋ฐฉ๋ฒ์ ๋๋ค.
์ฆ, ๊ฐ์ฒด์ ๋๋ฑ์ฑ ๋น๊ต๋ฅผ ์์, ์ค์์ ์ํ์์๋ง ๋น๊ตํ๋๊ฒ ๊ฐ๋ฅํ ๋ฐฉ๋ฒ์ ๋๋ค.
2. PK๋ฅผ ์ ์ธํ๊ณ equals๋ก ๊ตฌํ
PK๋ฅผ ์ ์ธํ ๋ชจ๋ Field๋ฅผ ๋น๊ตํ๋ ๋ฐฉ๋ฒ์ ๋๋ค.
ํ์ง๋ง, Entity ๋ด๋ถ์ join ๊ณผ ๊ฐ์ ๊ด๊ณ๊ฐ ์๋ค๋ฉด, ๋ค๋ฅธ ํ ์ด๋ธ๊ณผ ์ฐ๊ด๊ด๊ณ๊ฐ ์๊ธฐ ๋๋ฌธ์ ํฌํจํด์๋ ์๋ฉ๋๋ค.
์ ๋ฌธ์ ๋ ์์์ฑ Context ์ instance ๋ฅผ ์์ (๋ง์ฝ ๋น๋ฐ๋ฒํธ๋ฅผ ๋ณ๊ฒฝํ๋ค๋ฉด) ๋ค๋ฅธ ์์์ฑ Context ์ instance ์๋ ๋ ์ด์ ์ผ์นํ์ง ์์ต๋๋ค.
3. ๋น์ง๋์ค ํค๋ฅผ ์ด์ฉํ ๋๋ฑ์ฑ ๊ตฌํ
PK๋ฅผ ์ ์ธํ๊ณ Unique๋ฅผ ์ ์ฝ ์กฐ๊ฑด์ ๊ฐ์ง email, ๋๋ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ ์์ฑ ๋ฑ์ ์ฌ์ฉํ๋ฉด ์์ ๋ฐฉ๋ฒ๋ค์ ๋จ์ ์ ๊ทน๋ณตํ ์ ์์ต๋๋ค.
Jpa ํ๊ฒฝ์์ equals(), hashcode()๋ก ๋๋ฑ์ฑ ๋น๊ต์ ๋ํด ์์๋ดค์ต๋๋ค.
Last updated