인터페이스
모음구현한 라이브러리
예시 : HibernateJPA 동작 과정 : JPA 내부에서 JDBC API를 사용하여 SQL 호출 및 DB와 통신
SQL 중심적인 개발에서 객체중심적인 개발
이 가능하다.
유지보수 및 리팩토링에 유리하다.
Object와 RDB간의 패러다임 불일치 해결
상속 / 연관관계 / 객체 그래프 탐색 / 비교하기 같은 패러다임 불일치(RDB에 객체를 저장하는 데 불일치가 발생함)를 해결한다.
상속
기존에는 Dtype 컬럼을 이용해 어떤 자식 테이블과 관계가 있는지 정의한다. 예를 들어 Dtype의 값이 MOVIE면 영화 테이블과 관계가 있다. JPA는 자바 컬렉션에 객체를 저장하듯이 JPA에게 객체를 저장하면 된다.
연관관계
테이블 : 외래 키를 사용해서 다른 테이블과 연관관계를 가지고 조인을 사용해서 조회
객체 : 참조를 사용해서 다른 객체와 연관관계를 가지고 참조에 접근해서 연관된 객체 조회
- 참조가 있는 방향으로만의 참조가 가능(단방향)
→ JPA는 참조를 외래키로 변환 또는 외래키를 참조로 변환해서
적절한 SQL을 데이터베이스에 전달한다.
객체 그래프 탐색
지연로딩
). 따라서 연관된 객체를 신뢰하고 조회할 수 있다.비교
==
)와 동등성 비교(equals()
)의 두가지 방법이 존재한다.SQL을 통해 기본키가 같은 객체를 불러와 매핑하면 동일성을 비교할 때 false
가 반환된다. 같은 로우지만 객체로 볼 때 다른 인스턴스이기 때문이다.
long memberId = 100;
// new member
Member member1 = memberDao.getMember(memberId);
// new member
Member member2 = memberDao.getMember(memberId);
member1 == member2; // false
MemberDao.getMember()는 호출할 때마다 new Member()로 새로운 인스턴스가 반환되기 때문이다.