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);
}
}
더 자세한 내용은 밸덩을 확인하길 바란다.
반응형