JPA(Java Persistence API)는 자바 진영의 ORM 기술 표준으로 채택된 인터페이스의 모음이다. ORM이 큰 개념이라면 JPA는 더 구체화된 스펙을 포함한다. JPA 또한 실제로 동작하는 것이 아니라 어떻게 동작해야 하는지 메커니즘을 정리한 표준 명세로 JPA의 역할이 곧 ORM이라 봐도 된다.
JPA는 내부적으로 JDBC를 사용하여 적절한 SQL을 생성하고 데이터베이스를 조작해 객체를 자동 매핑하여 개발자가 직접 JDBC를 구현할 때 발생할 문제점을 보완해준다.
JPA 기반 구현체는 대표적으로 하이버네이트(Hibernate), 이클립스 링크(EclipseLink), 데이터 뉴클리어스(DataNucleus) 세 가지가 있다.
패러다임 불일치 문제를 해결, 영속성 컨텍스트(엔티티를 영구 저정하는 환경) 제공
하이버네이트는 자바의 ORM 프레임워크로, JPA가 정의하는 인터페이스를 구현하고 있는 JPA 구현체 중 하나이다.
Spring Data JPA 는 JPA를 편리하게 사용할 수 있도록 지원하는스프링 하위 프로젝트 중 하나이다. CRUD 처리에 필요한 인터페이스를 제공하며, 하이버네이트의 엔티티 매니저를 직접 다루지않고 리포지토리를 정의해 사용함으로써 스프링이 적합한 쿼리를 동적으로 생성하는 방식으로 데이터베이스를 조작한다.