JPA에서 Entity는 고유한데, Collection Type으로 Set이 아닌 List를 쓰는 이유

@OneToMany 필드를 작성하면서, 엔티티는 고유하기 때문에 Set을 사용해야할 것 같다는 생각이 들었다.

하지만 생각해보니 이제껏 강의나 다른 사람의 코드를 봤을 때는 대부분이 List를 사용하는 것을 보았는데 어떤 이유 때문에 List를 사용하는 것인지 의문이 들어 찾아보게 되었다.

 

Why?

JPA에서 지연 로딩을 적용했을 경우 프록시 객체를 반환하는데, 이때 OneToMany의 Set에 데이터를 추가하게되면 중복 검사를 진행하게되어 프록시가 강제로 초기화되는 문제가 발생한다.

그렇게 되면 지연 로딩의 장점을 활용할 수 없게되어 성능이 떨어질 수 있기 때문에 중복 검사를 하지않는 List를 많이 사용한다고 한다.