인프런 커뮤니티 질문&답변

Kang님의 프로필 이미지
Kang

작성한 질문수

자바 ORM 표준 JPA 프로그래밍 - 기본편

값 타입 컬렉션

AddressEntity delete

해결된 질문

작성

·

167

0

[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)

[질문 내용]

 

강의 후반부에서 member의 addressHistory에 AddressEntity를 추가하는 것까지 알려주셨는데

member의 addressHistory에서 AddressEntity 값 하나를 삭제하고 싶을때

이런 방식으로 하는게 맞는지 궁금합니다.

equals와 hashCode도 잘 고친건지도 궁금합니다.

 

    //Address의 equals, hashCode
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Address address = (Address) o;
        return Objects.equals(getCity(), address.getCity()) &&
                Objects.equals(getStreet(), address.getStreet()) &&
                Objects.equals(getZipcode(), address.getZipcode());
    }

    @Override
    public int hashCode() {
        return Objects.hash(getCity(), getStreet(), getZipcode());
    }

 

    //AddressEntity의 equals, hashCode
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        AddressEntity that = (AddressEntity) o;
        return Objects.equals(getId(), that.getId()) ||
                Objects.equals(getAddress(), that.getAddress());    //
    }

    @Override
    public int hashCode() {
        return Objects.hash(getId(), 
                getAddress().getCity(), getAddress().getStreet(), getAddress().getZipcode());    //
    }

 

Member findMember = em.find(Member.class, member.getId());
List<AddressEntity> addressHistory = findMember.getAddressHistory();
addressHistory.remove(new AddressEntity("city1", "street", "zipcode"));

답변 1

1

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. Kang님

삭제할 때는 컬렉션에서 삭제할 수 있으면 됩니다. 해당 코드를 실행해서 addressHistory에서 제거되었다면 맞는 코드입니다.

 

equals를 구현할 때 id 부분은 제거하셔야 합니다. id까지 체크하게 되면 같은 주소를 찾지 못하는 문제가 발생할 수 있습니다. DB에 저장되어서 불러온 데이터를 id를 가지고 있고, 내가 새로만든 객체는 id를 가지지 않으니까요.

감사합니다.

Kang님의 프로필 이미지
Kang
질문자

혹시 몰라서 id비교랑 address비교를 or 조건으로 해뒀는데 id비교는 아예 제거하겠습니다

답변 감사합니다!!

Kang님의 프로필 이미지
Kang

작성한 질문수

질문하기