개발 진행 중, 프론트 분께 아래와 요청을 받았다.
해당 내용을 확인해보니, Member에 equals 메서드를 이렇게 구현하고 있었다.
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Member member = (Member) o;
return Objects.equals(idMember, member.idMember);
}
프린트 찍어보니까
하나는 프록시 객체라서 false를 반환했던 것..!
그래서 하이버네이트 객체의 클래스를 불러오도록 수정해줬다.
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || Hibernate.getClass(this) != Hibernate.getClass(o)) return false;
Member member = (Member) o;
return Objects.equals(idMember, member.idMember);
}
하지만 여기서 또 문제가 발생한다.
member의 pk값을 찍으니 null로 출력되었다.
그래서 또 다시 false를 반환했다.
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || Hibernate.getClass(this) != Hibernate.getClass(o)) return false;
Member member = (Member) o;
return Objects.equals(this.getIdMember(), member.getIdMember());
}
따라서 엔티티의 getter 메서드를 이용하여 비교해줬다. 이 방식은 필드에 접근하면서 Hibernate가 프록시 객체를 초기화하도록 유도하는 방법이라고 한다.
잘 출력된다. 앞으로 주의하도록 하자.
'* > Spring' 카테고리의 다른 글
[Spring Boot] 동시성 제어 (2) - Synchronized (0) | 2024.11.10 |
---|---|
[Spring Boot] 동시성 제어 (1) - 동시성 문제, 재고 감소 시스템 구현 및 테스트 (1) | 2024.11.09 |
[JPA] Join Fetch 시 MultipleBagFetchException (0) | 2024.11.07 |
[Spring] OpenFeign 사용해보기 (0) | 2024.05.22 |
[JPA] 엔티티 생성 시 생겼던 문제들 (식별관계 문제) (0) | 2024.03.17 |