JPA는
- 특정 데이터베이스에 종속 X
- 각각의 데이터베이스가 제공하는 SQL 문법과 함수는 조금식 다르다
- 가변 문자: MySQL은 VARCHAR, Oracle은 VARHCAR2
- 문자열 자르는 함수: SQL: SUBSTRING, Oracle: SUBSTR
- 페이징: MySQL: LIMIT, Oracle: ROWNUM

Database 방언
- hibernate.dialect 속성에 지정

JPA 구동 방식

- 엔티티 매니저 팩토리는 하나만 생성해서 애플리케이션 전체에서 공유
- 엔티티 매니저는 쓰레드간에 공유X (사용하고 버려야 한다).
- JPA의 모든 데이터 변경은 트랜잭션 안에서 실행
객체와 테이블 생성후 매핑
- @Entity: JPA가 관리할 객체
- @Id: 데이터베이스 PK와 매핑
JPQL
- JPA는 SQL을 추상화한 JPQL이라는 객체 지향 쿼리 언어 제공
- SQL과 문법 유사, SELECT, FROM, WHERE, GROUP BY, HAVING, JOIN 지원
- JPQL은 엔티티 객체를 대상으로 쿼리
- SQL은 데이터베이스 테이블을 대상으로 쿼리
- 객체를 대상으로 검색하는 객체 지향 쿼리
