JPA를 사용하지 않으면 데이터베이스와 통신할때 개발자는 직접 SQL 문을 작성해서 개발해야한다.
이 과정에서 패러다임의 불일치가 일어나는데, 근본적인 이유는 객체지향과 관계형 데이터베이스간의 구조 차이이다.
상속 - DB에 저장할 객체에는 상속 관계를 쓰지 않는다. DB의 슈퍼타입 서브타입 관계를 사용하면 객체의 상속과 유사한 형태로 설계는 할 수 있다. 다만 여기서 개발자가 쓰는 비용이 많아진다. 부모 타입과 자식 타입에 해당하는 테이블을 조인하고 결과 객체를 생성해야 한다.
하지만 데이터가 자바 컬렉션에 보관된다면 타입에 대한 고민 없이 컬렉션을 조회하면 된다.
연관관계 - 객체는 참조를 사용해 다른 객체와 연관관계를 가지는 반면 테이블은 외래 키를 사용해 다른 테이블과 연관관계를 가지고 조인을 사용해 조회한다. 여기서 객체를 테이블에 맞추어 모델링하면 코드상에서 한 쪽 방향밖에 참조를 통한 조회를 할 수 밖에 없다.
객체 그래프 - 객체는 마음껏 객체 그래프를 탐색 할 수 있어야 한다. 하지만 DB에서는 연관 데이터를 조회하지 않으면 탐색할 수 없다. SQL을 직접 작성해서 객체 그래프를 어디까지 탐색할지 정할 수 있지만 이는 객체지향 프로그래밍에서 큰 제약이 된다. 비즈니스 로직에 따라 객체 그래프의 탐색 범위가 다르기 때문이다.
비교 - DB는 기본키값으로 구분하지만, 객체는 동일성과 동등성을 이용해서 비교한다. 따라서 JDBC를 사용하면 서로 다른 인스턴스를 생성하므로 동일성 비교에 실패한다.
자바 진영의 ORM 기술 표준이다.
Object-relational mapping(객체 관계 매핑)이며 객체는 객체대로, RDBS는 RDBS대로 설계하는 방식이다. 중간에서 ORM 프레임워크가 매핑해준다.
출처 : 인프런 자바 ORM 표준 JPA 프로그래밍 - 기본편