데이터베이스에 데이터를 관리하려면 SQL을 사용해야 한다. 자바로 작성한 애플리케이션은 JDBC API를 사용해서 SQL을 데이터베이스에 전달한다. 이 과정에서 객체를 데이터베이스에 CRUD하려면 많은 SQL과 JDBC API를 코드로 작성해야 한다. 테이블마다 이런 비슷한 과정을 반복해야 하는데, 개발하려는 애플리케이션의 크기가 커질수록 무수히 많은 SQL을 작성해야 한다.
객체와 관계형 데이터베이스는 지향하는 목적이 달라 둘의 기능과 표현 방법이 다르다.
이것을 객체와 관계형 데이터베이스의 패러다임 불일치 문제라고 한다. 따라서 객체 구조를 테이블 구조에 저장하는데 한계가 있다.
abstract class Item {
Long id;
String name;
int price;
}
// ✔️상속관계
class Album extends Item {
String artist;
}
// ✔️상속관계
class Movie extends Item {
String director;
String actor;
}
// ✔️상속관계
class Book extends Item {
String author;
String isbn;
}
jpa.persist(album);
INSERT INTO TEAM ...;
INSERT INTO ALBUM ...;
String albumId = "id100";
Album album = jpa.find(Album.class, albumId);
SELECT I.*, A.*
FROM ITEM I
JOIN ALBUM A ON I.ITEM_ID=A.ITEM_ID;
class Member {
String id;
Team team; // 참조로 연관관계
String username;
}
class Team {
Long id; // TEAM_ID(PK)
String name;
}
public Member find(String memberId) {
// SQL 실행
...
Member member = new Member();
...
// 데이터베이스에서 조회한 회원 관련 정보를 모두 입력
Team team = new Team();
...
// 데이터베이스에서 조회한 팀 관련 정보를 모두 입력
// 회원과 팀 관계를 설정
member.setTeam(team);
return member;
}