Java/JPA
[JPA] List<Entity> 비교
phyho
2024. 6. 19. 16:41
* 자바 List 비교 참고
[JS] 배열값 비교 (include, '===') / Java_List 비교
* 배열요소 비교 ( include ) const arr = [1, 2, 3, 4, 5];console.log(arr.includes(2)); // true * includes() 함수는 내부적으로 '===' 연산자를 사용하여 요소를 비교하기 때문에 다른 타입은 비교 불가능.const mixedArr =
phyho.tistory.com
[ Entity 클래스 ]
@Entity
@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Entity {
private String id;
private String name;
private String code;
}
[ 서비스 로직 ]
// param => List<String> prevList, List<String> newList
// => List<Entity> prevInfo, List<Entity> saveInfo
// 삭제할 값이 있는 경우
if(!prevList.equals(newList)) {
prevInfo.removeAll(saveInfo);
entityRepository.deleteAll(prevInfo);
}
=> List<String> 의 비교는 순서까지 같아야한다 **
=> List<Entity> 에서 removeAll() 을 사용하게 되면 각 요소들을 equals() 메소드로 비교.
따라서 Entity클래스에 equals() / hashCode() 메소드를 오버라이딩해 어떤 엔티티를 동등하다고 판단할지 재정의 필요.
( IntelliJ 플러그인으로 자동생성 가능_ 엔티티의 식별자(id)를 기준으로 잡는다 )
@Entity
@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Entity {
private String id;
private String name;
private String code;
// equals method
@Override
public boolean equals(Object o) {
if (this == o) return true; // 객체동등비교
if (!(o instanceof Entity)) return false; // 타입비교
Entity entity = (Entity) o;
return Objects.equals(id, entity.id) && // id비교
Objects.equals(code, entity.code); // code비교
}
// hashCode method
@Override
public int hashCode() {
return Objects.hash(id, code);
}
}
=> id와 code가 같다면 동일한 엔티티로 간주.