JPA


### ORM 표준화된 API
JAVA EE에 포함된 사양 중 하나

[Spring Data JPA](https://texonom.com/spring-data-jpa-e86254241cf04f6e9e2cda77a4f3fb99)



자바 객체와 DB 테이블 사이의 매핑 설정을 통해 SQL을 생성
해야할 일 2개
- Entity 클래스 작성
- EntityManager 메서드 호출


JPA Interface : 인터페이스 → 상속 Hibernate, EcipseLink, DataNucleus 등 : 구현체
> -  JPA 프로바이더
>> 
>> [하이버네이트](https://texonom.com/a7d748b24cc2442db557bed18c95be2b)
>> 
>> 
>> [ EclipseLink ](https://texonom.com/eclipselink-a8cede3dcaee461cbfc974cf2d0f5f6d)
>> 
>> 
>> [DataNucleus](https://texonom.com/datanucleus-d0f1472cb50d43e0a83efa5ba00ae057)
>> 
>> 

> ![](https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2Fe9162b91-7586-41c5-b748-ccb4e1d8313a%2FUntitled.png?table=block&id=16412519-cdee-4e1a-a8de-cee784612abb&cache=v2)


객체를 통해 쿼리를 작성할 수 있는 JPQL(Java Persistence Query Language) 지원
JPA는 성능 향상을 위해 지연 로딩이나 즉시 로딩과 같은 몇가지 기법을 제공하는데 이것을 잘 활용하면 SQL을 직접 사용하는 것과 유사한 성능을 얻을 수 있습니다.
**하지만 잘못이해하고 사용하는 JPA는 성능을 크게 감소시킬 수 있습니다**



> [JPA란](https://dev-troh.tistory.com/150)




> @Entity 애노테이션을 붙인 클래스를 "엔티티"라고 부릅니다.
> 하지만 프로그램에서는 영속 컨텍스트에 직접 접근할 수 없고 EntityManager를 통해서만 영속 컨텍스트에 접근할 수 있습니다.

> ![](https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2Ff70ce31b-661a-4f3b-99a9-3bd3a068b15a%2FUntitled.png?table=block&id=d39ccc17-83aa-47f9-a669-2e08e1689e70&cache=v2)
> ## JPA 영속성
> 




- AIO Example
> [[스프링부트 (7)] Spring Boot JPA(1) - 시작 및 기본 설정](https://goddaehee.tistory.com/209)





