* 자바 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가 같다면 동일한 엔티티로 간주.
'Java > JPA' 카테고리의 다른 글
[JPA] findBy~ 일부 필드값만 가져오기 (JPQL, 네이티브쿼리) / (+ 오류) (0) | 2024.07.28 |
---|---|
[JPA] JPA_existBy~ / Querydsl 성능비교 (+ fetchOne(), fetchFirst()) (0) | 2024.06.21 |
[JPA] findById, existsById, getById (0) | 2024.06.19 |
[JPA] Querydsl 벌크삭제 (0) | 2024.06.19 |
[Java/Spring] JPA / JPA 어노테이션 / JpaRepository 인터페이스 (0) | 2024.03.23 |