- JPA란?
Java Persistence API의 약자로 자바 진영의 ORM 기술 표준이다.
- 그렇다면 ORM은 무엇일까??
- Object-relational mapping(객체 관계 매핑)
-관계형 데이터베이스는 관계형 데이터베이스대로 설계
-ORM 프레임워크가 중간에서 매핑
JPA는 애플리케이션과 JDBC 사이에서 동작한다.
먼저 maven으로 JPA persistence.xml을 다음과 같이 설정한다.
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.2"
xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_2.xsd">
<persistence-unit name="hello">
<properties>
<!-- 필수 속성 -->
<property name="javax.persistence.jdbc.driver" value="org.h2.Driver"/>
<property name="javax.persistence.jdbc.user" value="sa"/>
<property name="javax.persistence.jdbc.password" value=""/>
<property name="javax.persistence.jdbc.url" value="jdbc:h2:tcp://localhost/~/test"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>
이 옵션에서 살펴볼 것은 하이버네이트는 다양한 데이터베이스의 언어를 지원한다. 따라서 hibernate.dialect의 value의 데이터베이스를 바꾸어주면 알아서 바뀐 데이터 베이스의 언어로 매핑된다.
JPA 구동 방식
JPA에서 Persistence는 META-INF/persistence.xml을 참조하여 설정 정보를 조회한 후, EntityManagerFactory를 생성하고,
EntityManagerFactory가 EntityManager를 생성하는 방식이다.
- 객체와 테이블을 생성하고 매핑하기
먼저 h2데이터베이스에서 아래와 같이 테이블을 생성하였다.
create table Member (
);
id bigint not null,
name varchar(255),
primary key (id)
);
그리고 아래와 같이 Member클래스에 @Entity, Long id에 @ID어노테이션을 붙여 데이터베이스의 PK와 매핑하였다.
@Entity : JPA가 관리할 객체이다.
@ID : 데이터베이스 PK와 매핑
주의 사항
EntityManagerFactory는 아래 코드와 같이 위에서 설정했던 persistence.xml파일에서 <persistence-unit name="hello">를 참조하여 하나만 생성해서 애플리케이션 전체에서 공유한다.
EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");
EntityManager는 스레드 간에 공유를 하면 안 된다. 즉 사용하고 버려야 한다는 것이다.
JPA의 모든 데이터 변경은 트랜잭션 안에서 실행된다.
출처 : https://www.inflearn.com/course/ORM-JPA-Basic#
'JPA' 카테고리의 다른 글
다양한 연관관계 매핑 (0) | 2021.10.09 |
---|---|
연관관계 매핑 (0) | 2021.10.08 |
엔티티 매핑 (0) | 2021.10.07 |
flush, 준영속 상태 (0) | 2021.10.06 |
영속성 컨텍스트, 1차캐시, 변경감지 (0) | 2021.10.05 |