🙄H2 데이터베이스 설치 및 연동
- ✔️이후 접속
jdbc:h2:tcp://localhost/~/test
🙄애플리케이션 개발
- ✔️설정 정보
/resources/META-INF
하위에 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="jakarta.persistence.jdbc.driver" value="org.h2.Driver"/>
<property name="jakarta.persistence.jdbc.user" value="sa"/>
<property name="jakarta.persistence.jdbc.password" value=""/>
<property name="jakarta.persistence.jdbc.url" value="jdbc:h2:tcp://localhost/~/test"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.format_sql" value="true"/>
<property name="hibernate.use_sql_comments" value="true"/>
<property name="hibernate.hbm2ddl.auto" value="create" />
</properties>
</persistence-unit>
</persistence>
- ✔️데이터베이스 방언
- JPA는 특정 데이터베이스에 종속X
- 각각의 데이터베이스가 제공하는 SQL문법과 함수는 조금씩 다름
- 방언 : SQL표준을 지키지 않는 특정 데이터베이스만의 고유한 기능

- ✔️JPA 구동 방식
- 엔티티 매니저 팩토리 생성하기
- JPA를 시작하려면
persistence.xml
의 설정 정보를 사용해서 엔티티 매니저 팩토리를 생성해야 한다. 이 때, Persistence
클래스를 사용하는데 이 클래스는 엔티티 매니저 팩토리를 생성해서 JPA를 사용할 수 있게 준비한다.
META-INF/persistence.xml
에서 이름이 hello인 영속성 유닛을 찾아서 JPA를 동작시키기 위한 기반 객체를 만들고, JPA 구현체에 따라서는 데이터베이스 커넥션 풀도 생성하므로 엔티티 매니저 팩토리를 생성하는 비용은 아주 크다.
- 따라서 엔티티 매니저 팩토리는 애플리케이션 전체에서 딱 한 번만 생성하고 공유해서 사용해야 한다.
- 엔티티 매니저 생성하기
- 엔티티 매니저 팩토리에서 엔티티 매니저를 생성한다.
- 엔티티 매니저를 사용해서 엔티티를 데이터베이스에 등록, 수정, 삭제, 조회할 수 있다.
- 엔티티 매니저는 데이터베이스 커넥션과 밀접한 관계가 있으므로 스레드 간에 공유하거나 재사용하면 안 된다.
- 종료
- 사용이 끝난 엔티티 매니저는 반드시 종료해야하며 애플리케이션을 종료할 때 엔티티 매니저 팩토리도 반드시 종료해야한다.

@Entity
public class Member {
@Id
private Long id;
private String name;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
- ✔️트랜잭션 관리
- JPA를 사용하면 항상 트랜잭션 안에서 데이터를 변경해야 한다.
- 트랜잭션 없이 데이터를 변경하면 예외가 발생한다.
- 트랜잭션을 시작하려면 엔티티 매니저에서 트랜잭션 API를 받아와야 한다.
- 트랜잭션 API를 사용해서 비즈니스 로직이 정상 동작하면 트랜잭션을 커밋하고 예외가 발생하면 트랜잭션을 롤백한다.
public class JpaMain {
public static void main(String[] args) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");
EntityManager em = emf.createEntityManager();
EntityTransaction ta = em.getTransaction();
ta.begin();
try {
Member member = new Member();
member.setId(1L);
member.setName("Hello");
em.persist(member);
ta.commit();
} catch (Exception e) {
ta.rollback();
} finally {
em.close();
}
emf.close();
}
}