kyucumber
전체 글 보기

Hibernate 프록시 객체의 equals가 정상적으로 동작하지 않는 문제

JPA 사용 시 fetchType이 LAZY로 지정된 엔티티의 equals 메소드가 의도한대로 동작하지 않는 문제가 발생했습니다.

public boolean equals(Object o) { if (o == null || getClass() != o.getClass()) // ... }

위의 equals 메소드는 IDE의 자동 완성 기능을 통해 구현했는데, getClass가 아니라 아래와 같이 instanceOf를 이용해 비교해야 정상적으로 동작합니다.

public boolean equals(Object o) { if (!(o instanceof B)) { // ... }

추가로 해당 프록시 객체의 값을 꺼내는 부분 또한 getter를 사용하도록 변경해야 값을 정상적으로 받아올 수 있습니다.

Reference

Hibernate equals and proxy

Table of contents