‘JPA는 패러다임 불일치를 해결한다’의 의미
JPA를 공부하다보면 ‘JPA는 패러다임 불일치를 해결한다’는 말을 항상 듣게된다. 그동안 ‘아~ 패러다임을 해결하는구나’ 로만 이해하고 넘어갔었는데 오늘 김영한님 JPA 강의 보고 깔끔하게 정리해주셔서 기억해두려고 한다!!
📚 그런데 패러다임(paradigm)이 정확하게 뭐지?
어떤 한 시대 사람들의 견해나 사고를 근본적으로 규정하고 있는 테두리로서의 인식의 체계. 또는 사물에 대한 이론적인 틀이나 체계.
JPA와 패러다임의 불일치 해결
크게 4가지 불일치를 해결한다.
1. JPA와 상속
관계형 데이터베이스와 객체 패러다임 불일치를 JPA가 중간에서 해결해준다.
- 데이터를 저장할 때
— 개발자가 할 일 : jpa.persist(album);
— JPA 가 실제로 하는 일 : insert into ITEM ... 과 insert into ALBUM...
(insert 2개 날림)
- 데이터를 조회할 때
— 개발자가 할 일: Album album = jpa.find(Album.class, albumId);
— JPA가 실제로 하는 일 : SELECT I.*, A.* FROM ITEM I JOIN ALBUM A ON I.ITEM_ID = A.ITEM_ID;
(알아서 ITEM과 ALBUM을 조인해줌)
2. JPA와 연관관계
- 연관관계 저장: 자바 컬렉션에서 값을 저장하는 것처럼 쓸 수 있다.
member.setTeam(team);
jpa.persist(member);
3. JPA와 객체 그래프 탐색
- 객체 그래프 탐색 : 자바 컬렉션에서 값을 가져오는 것처럼 쓸 수 있다.
Member member = jpa.find(Member.class, memberId);
Team team = member.getTeam();
Delivery delivery = member.getOrder().getDelivery();
JPA는 지연로딩이란 기능이 있어서 member.getOrder().getDelivery();
란 코드가 실행될 때, 조회쿼리를 날린다. 자유롭게 객체 그래프를 탐색할 수 있다.
4. JPA와 비교하기
String memberId = "100";
Member member1 = jpa.find(Member.class, memberId);
Member member2 = jpa.find(Member.class, memberId);member1 == member2; // true
동일한 트랜잭션에서 조회한 엔티티는 같음을 보장한다.
출처: 김영한 자바 ORM 표준 JPA 프로그래밍- 기본편