본문 바로가기
JPA & Hibernate

JPA 시작

by Salt-Fn 2023. 2. 20.

인프런의 자바 ORA 표준 JPA 프로그래밍 - 기본편과 자바 ORM 표준 JPA 책을 공부하며 정리한 포스트입니다.

1. 설정

빌드 : gradle

자바 버전 : 17

DB: mariaDB

추가한 의존성:

xml설정

xml파일 경로

JPA 표준 속성

 - javax.persistence.jdbc.driver : JDBC드라이버

 - javax.persistence.jdbc.user : 데이터베이스 접속 아이디

 - javax.persistence.jdbc.password : 데이터베이스 접속 비밀번호

 - javax.persistence.jdbc.url : 데이터베이스 접속 URL

하이버네이트 속성

 - hibernate.dialect : 데이터베이스 방언 설정

 

* gradle로 빌드할 경우 xml에 entity 경로 추가해야함. (spring framework나 JE22 환경에서는 엔티티를 탐색하는 기능을 제공하므로 이런 문제가 발생하지 않는다.)

데이터베이스 방언

  • JPA는 특정 데이터베이스에 종속되지 않음.
  • 각각의 데이터베이스가 제공하는 SQL 문법과 함수는 조금씩 다른데 이러한 SQL 표준을 지키지 않는 특정 데이텁베이스 만의 고유한 기능을 방언이라고 한다.
  • XML설정에 hibernate.dialect  설정을 통해 각각의 DB에 맞는 방언을 지정할 수 있다.

JPA 구동 방식

1. Entity Manager Factory 생성

 우선 persistence.xml의 설정 정보를 이용해 Entity Manager Factory를 생성한다. 이때 persistence 클래스를 사용하는데 이 클래느는 Entity Manager Factory를 생성해서 JPA를 사용할 수 있게 준비한다.

persistenceUnitName은 xml의 <persistence-unit name="jpashop">부분이랑 맞춘다.

persistence.xml의 설정 정보를 읽어서 JPA를 동작시키기 위한 기반 객체를 만들고 JPA 구현체에 따라서는 데이터베이스 커넥션 풀도 생성하므로 엔티티 매니저 팩토리를 생성하는 비용은 아주 크므로 애플리케이션 전체에서 딱 한번 생성하고 공유해서 사용해야 한다.

 

2.  Entity Manager 생성

Entity Manager Factory에서 Entity Manager를 생성한다. Entity Manager를 사용해서 Entity를 데이터베이스에서 등록/수정/삭제/조회 할 수 있다. Entity Manager는 데이터베이스 커넥션과 밀접한 관계가 있으므로 스레드간에 공유하거나 재사용 하면 안 된다.

 

3. 종료

 마지막으로 사용이 끈난 Entity Manager는 반드시 종료 해야 한다.

애플리케이션을 종료할 때 Entity Manager Factory도 종료해야 한다.

트랜잭션 관리

JPA의 모든 데이터 변경은 트랜잭션 안에서 실행하여야 한다. 트랜잭션 없이 데이터를 변경하면 예외가 발생한다.

트랜잭션 API를 사용해서 비즈니스 로직이 정상 동작하면 트랜잭션을 커밋하고 예외가 발생하면 롤백한다.

 

객체와 테이블을 생성하고 매핑하기

  • @Entity: JPA가 관리할 객체
  • @Id: 데이터베이스 PK와 매핑

JPQL

가장 단순한 조회 방법.

  • EntityManager.find()
  • 객체 그래프 탐색 (a.getB().getC())
  • JPA를 사용하면 엔티티 객체를 중심으로 개발
  • 검색을 할 때도 테이블이 아닌 엔티티 객체를 대상으로 검색
  • 모든 DB 데이터를 객체로 변환해서 검색하는 것은 불가능
  • 애플리케이션이 필요한 데이터만 데이터베이스에서 불러오려면 조건이 포함된 SQL을 사용해야 한다.
  • SQL을 추상화해서 특정 데이터베이스 SQL에 의존 X

 

'JPA & Hibernate' 카테고리의 다른 글

JPA 고급 매핑  (0) 2023.03.03
JPA 다양한 연관관계 매핑  (0) 2023.02.27
JPA 연관관계 매핑 기초  (0) 2023.02.23
JPA 엔티티 매핑  (0) 2023.02.22
JPA 영속성 관리  (0) 2023.02.20