hanker

java.lang.UnsupportedOperationException 에 대해서 본문

JAVA

java.lang.UnsupportedOperationException 에 대해서

hanker 2024. 11. 9. 00:26
반응형

개발을 하다보면 뭔가 정신줄 놓고 작업할 때가 있는데, 그 시점에 제일 많이 등장하는 예외이다. 
이 예외가 왜 나는지? 안나게 하려면 어떻게 해야하는지 알아보자

 
 
 

 
 

발생 이유

 

발생이유는 여러가지가 있는데, 찬찬히 알아보자
1. Java 9 에서 추가된 List.of() 를 사용할 때, List.of()로 생성한 리스트는 읽기 전용이라서 추가/수정/삭제가 안되는데, 이를 하려고 시도하다가 발생

public static void main(String[] args) {

    List<String> list = List.of("A", "B", "C");
    list.remove("C");  // UnsupportedOperationException 발생

}

 

반응형

2. Spring JPA 에서 @Transactional(readOnly = true) 로 설정된 트랜잭션 안에서 엔티티의 컬렉션을 수정하려고 하다가 발생

    @Transactional(readOnly = true)
    public void modifyEntities(List<String> entities) {
        entities.add("newEntity");  // UnsupportedOperationException 발생
    }

 
 

3. JPA에서 Fetch 타입이 Lazy로 설정된 컬렉션을 직접 수정하려고 할 때

@Entity
public class User {
    @Id
    private Long id;

    @OneToMany(fetch = FetchType.LAZY)
    private List<Order> orders;
}

// 사용 예시
User user = userRepository.findById(1L);
user.getOrders().add(new Order());  // UnsupportedOperationException 발생

 
 
 

정리

 

즉 나오는 이유를 정리해보면 수정하면 안되는 애들을 수정을 해서 나오는 오류이다.

반응형