Closed IronKim closed 9 months ago
버그는 equals()
, hashcode()
안에서 각 클래스 필드들을 비교하기 위해 접근할 떄, 직접 접근(direct field access)을 했기 때문이다.
jpa 엔티티는 그대로 인스턴스로 만들어 사용하는게 아니라, jpa 구현체 - spring data jpa 에서는 하이버네이트 - 에 의해 프록시 인스턴스로 만들어진다.
때문에 직접 접근을 하면 프록시가 되기 전, 후 인스턴스의 차이로 equals
, hashcode
가 제대로 각 필드를 참조하지 못할 수 있다.
하지만 getter 와 같이 메소드를 이용해 필드에 접근하면 프록시 인스턴스가 된 이후에도 명확하게 각 필드에 접근할 수 있기 때문에
entity 안의 equals
, hashcode
를 구현할 때는 getter를 사용해야 한다.
이를 정리한 기술 블로그가 여럿 있는데, 그 중 유명한 jpa buddy 플러그인을 만드는 회사의 블로그 글을 첨부하니 공부에 참고할 것.
내용이 많은데 getter method
로 검색하면 원하는 문서 부분을 좀 더 빨리 찾을 수 있다.
각 엔티티 클래스의
equals()
구현에 버그가 있는 것 같다