@Entity에 대한 @OneToMany 매핑에서 컬렉션의 clear() 메서드를 호출하면 삭제 과정이 효율적이지는 않다. 하이버네이트의 경우 @Entity의 컬렉션 객체의 clear() 메서드를 호출하면 select 쿼리로 대상 엔티티를 로딩하고, 각 개별 엔티티에 대해 delete 쿼리를 실행한다. 즉 컬렉션에 보관 되어 있던 엔티티의 개수가 4개이면 엔티티 목록을 가져오기 위한 한 번의 select 쿼리와 각 엔티티를 삭제하기 위한 네 번의 delete쿼리를 실행한다. 변경 빈도가 낮으면 괜찮지만 빈도가 높으면 전체 서비스 성능에 문제가 될 수 있다.
하이버네이트는 @Embeddable 타입에 대한 컬렉션의 clear() 메서드를 호출하면 컬렉션에 속한 객체를 로딩하지 않고 한 번의 delete 쿼리로 삭제 처리를 수행한다. 따라서 애그리거트의 특성을 유지하면서 이 문제를 해소하려면 결국 상속을 포기하고 @Embeddable로 매핑된 단일 클래스로 구현해야 한다.
'스프링' 카테고리의 다른 글
@EventListener 어노테이션이란? (0) | 2025.02.12 |
---|---|
@Access란? (0) | 2025.02.05 |