학습기록남기기
JPA(1) 본문
SQL 중심적인 개발
- CRUD 쿼리 작성과 수정의 같은 동작의 무한 반복
- 자바 객체를 직접 DB에 넣을 수 없고 , ‘ 자바 객체의 변수’와 ‘테이블 컬럼’ 과 매핑(=매칭)이 필요
→ JPA를 통해 위의 2가지 문제점을 해결
객체와 RDB의 차이
- 상속
- 객체는 명확하게 “상속 관계” 존재, RDB는 유사한 개념인 “슈퍼타입-서브타입” 존재
- RDB의 서브 타입 테이블에 데이터 저장 시 슈퍼 타입과 , 서브 타입 테이블에 각각 저장( 2 번의 INSERT 필요)
- 조회 시에는 슈퍼 타입 ,서브 타입 테이블의 JOIN SQL 작성해야 함
- JPA는 이런 번거로운 과정을 알아서 해줌
- 객체는 명확하게 “상속 관계” 존재, RDB는 유사한 개념인 “슈퍼타입-서브타입” 존재
- 연관관계
- 객체는 “참조”를 사용해 다른 객체와의 관계를 맺고 / 테이블은 “외래키” 사용해 다른 테이블과 관계를 맺음
- 객체 지향 모델링은 객체 참조가 있어 다른 객체 탐색이 가능 , 테이블 지향 모델링은 두 테이블 간 참조를 하려면 “외래키”를 사용해야 함
- JPA는 관계 맺고 있는 객체 참조를 외래키로 변환해서 알아서 해주고 , 조회 할 때 외래키를 참조로 변환 과정을 알아서 해줌
- 객체는 “참조”를 사용해 다른 객체와의 관계를 맺고 / 테이블은 “외래키” 사용해 다른 테이블과 관계를 맺음
- 객체 그래프 탐색
- SQL을 직접 작성할 때 어느 테이블 까지 탐색할 수 있는지 정해진다(작성 순간 정해짐)
- 왜냐면 JOIN 할 테이블을 직접 선택하기 때문 —> 다른 객체 탐색하려면 SQL 수정필요
- JPA는 실제 객체를 사용하는 시점까지 데이터 베이스 조회를 미루는(=지연 로딩)이 있다
- SQL을 직접 작성할 때 어느 테이블 까지 탐색할 수 있는지 정해진다(작성 순간 정해짐)
- 비교
- DB는 기본 키 의 값으로 컬럼의 값을 구분
- 객체는 동일성 비교(객체의 주소 값을 비교 == 연산자) 와 동등성 비교 (객체의 내부 값을 비교 equals() 메서드)
- JPA는 같은 트랜잭션일 때 같은 객체가 조회 되는 것을 보장한다