Entity에 대해서 롬복 어노테이션인 @EequalsAndHashCode를 적용하게 되면 모든 인자값을 서로 비교하여 객체를 검사하기에

Id만 선택하여 @EquealsAndHashCode를 작성한다.

 

아래는 그와 관련된 간단한 예제 코드이다.

@Getter
@ToString
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Table(indexes = {
        @Index(columnList = "title"),
        @Index(columnList = "hashtag"),
        @Index(columnList = "createdAt"),
        @Index(columnList = "createdBy")
})
@Entity
public class Article {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Setter
    @Column(nullable = false)
    private String title;

    @Setter
    @Column(nullable = false, length = 1000)
    private String content;

    ...

	// AS-IS
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Article article = (Article) o;
        return Objects.equals(id, article.id);
    }


	// TO-BE
    // 객체 타입이 object 타입인지 확인한 후(instanceof) object를 비교할 객체 타입으로 
    // casting 하는 과정이 필요했는데 자바버전 14 이후로 그 과정이 없어졌고, 
    // scope 안에 참조변수를 넣을 수 있게 되었고 이를 Pattern variable이라 한다.
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof Article article)) return false;
        return id != null && id.equals(article.id);
    }

    @Override
    public int hashCode() {
        return Objects.hash(id);
    }
}

더 자세한 내용은 밸덩을 확인하길 바란다.

반응형

+ Recent posts