1. JPA와 JPQL
JPA를 사용하면 엔티티 객체를 중심으로 개발하는데,
단건으로 가져오기에는 매우 편하다.
하지만 문제는 검색 쿼리쪽인데, 검색을 할 때도 테이블이 아닌 엔티티 객체를 대상으로 검색한다.
그에 따라, 모든 DB 데이터를 객체로 변환해서 검색하는 것은 불가능하고
애플리케이션이 필요한 데이터만 DB에서 불러오려면 결국 검색 조건이 포함된 SQL이 필요하다.
JPA는 SQL을 추상화한 JPQL이라는 객체 지향 쿼리 언어를 제공하는데, SQL과 비슷한 문법, SELECT, FROM, WHERE, GROUP BY, HAVING, JOIN을 지원한다.
JPQL은 엔티티 객체를 대상으로 쿼리하고, SQL은 데이터베이스 테이블을 대상으로 쿼리한다.
SQL을 추상화해서 특정 데이터베이스 SQL에 의존하지 않는다.(알아서 특정 데이터베이스 SQL에 맞춰서 쿼리날려줌)
2. 영속성 컨텍스트
JPA를 이해하는데 가장 중요한 용어이다. "엔티티를 영구 저장하는 환경" 이라는 뜻이며, 엔티티 매니저를 통해서 접근할 수 있다.
엔티티의 생명주기
비영속(new/transient)
- 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태 (객체를 생성한 상태)
- Member member = new Member()
영속(managed)
- 영속성 컨텍스트에 관리되는 상태(객체를 저장한 상태)
- EntityManager.persist(member)
준영속(detached)
- 영속성 컨텍스트에 저장되었다가 분리된 상태
삭제(removed)
- 삭제된 상태
'Languages | Frameworks > Java' 카테고리의 다른 글
Java) HashMap의 computeIfAbsent에 대해(feat. getOrDefault) (0) | 2023.01.27 |
---|---|
Java) List와 ArrayList의 차이? (0) | 2022.11.08 |
암호화 알고리즘 종류와 추천(SHA, PBKDF2, Bcrypt) + Java 적용 샘플 (0) | 2022.07.18 |
게시판 글이 중간에 삭제시 > 번호 초기화후 인덱싱 하는 방법 (0) | 2022.07.13 |
[Java] 추상 클래스와 인터페이스 (0) | 2022.05.30 |