‘JPA는 패러다임 불일치를 해결한다’의 의미

sonnie
lucky-sonnie
Published in
3 min readSep 9, 2020

JPA를 공부하다보면 ‘JPA는 패러다임 불일치를 해결한다’는 말을 항상 듣게된다. 그동안 ‘아~ 패러다임을 해결하는구나’ 로만 이해하고 넘어갔었는데 오늘 김영한님 JPA 강의 보고 깔끔하게 정리해주셔서 기억해두려고 한다!!

📚 그런데 패러다임(paradigm)이 정확하게 뭐지?

어떤 한 시대 사람들의 견해나 사고를 근본적으로 규정하고 있는 테두리로서의 인식의 체계. 또는 사물에 대한 이론적인 틀이나 체계.

JPA와 패러다임의 불일치 해결

크게 4가지 불일치를 해결한다.

1. JPA와 상속

관계형 데이터베이스와 객체 패러다임 불일치를 JPA가 중간에서 해결해준다.

Table 슈퍼타입 서브타입 관계
  • 데이터를 저장할 때

— 개발자가 할 일 : 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 프로그래밍- 기본편

--

--