문서의 이전 판입니다!
하이버네이트에 관해 항상 기억해둬야 할 사항들을 정리해 둔다.
hashCode와 equals를 항상 구현해야 한다.
이때 DB 프라이머리키(ID)가 아닌 항상 변치 않고 해당 객체를 대표하는 의미를 가질 수 있는 비즈니스 키(business key)를 hashCode와 equals의 대상으로 삼아야 한다.
이유는 맵(Map)등에 신규 객체를 넣을 경우 신규 객체는 아직 프라이머리키가 지정되지 않은 상태이기 때문에 ID가 모두 null
혹은 0
이며 이 경우 맵에 저장할 때 equals가 항상 true 여서 이전의 값을 뒤에 저장한 값이 계속 덮어써버리는 현상이 발생하기 때문이다.
따라서 ID를 equals/hashCode의 기준으로 삼을 경우 매우 주의해야 한다.