///////
Search
🤖

JPA

EntityManagerFactory emf = Persistence.CreateEntityManagerFactory("hello"); // persistence.xml persistence-unit의 name이 hello EntityManager em = emf.createEntityManager(); EntityTransaction tx = em.getTransaction();
Java
복사

1.1 JPA 내부구조

객체와 RDBS 매핑
영속성컨텍스트(PersistenceContext) —> 스프링컨테이너(ApplicationContext)

1.2 영속성컨텍스트

엔티티를 영구 저장
엔티티매니저를 통해 영속성컨텍스트에 접근
같은 트랜잭션이면 같은 영속성컨텍스트에 접근하는 것과 같다

2.1. ORM?

Object-relational mapping(객체 관계 매핑)
객체는 객체대로 설계
관계형 데이터베이스는 관계형 데이터베이스대로 설계
ORM 프레임워크가 중간에서 매핑
대중적인 언어에는 대부분 ORM 기술이 존재

2.2. JPA는 표준 명세

JPA는 인터페이스의 모음
JPA 표준 명세를 구현한 3가지 구현체
Hibernate
EclipseLink
DataNucleus
우리가 실제로 쓰는 것은 Hibernate라고 보면 된다.(JPA는 인터페이스)

2.1. 식별자 매핑 어노테이션

@Table
이 애노테이션을 사용하지 않을 경우 테이블이름은 Entity의 객체이름으로 DB 테이블에 저장
테이블 이름을 수동 기입
@Column
테이블 칼럼으로 매핑
이 애노테이션을 사용하지 않을 경우 변수 이름으로 DB 칼럼에 저장
@Id 직접 매핑
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
데이터베이스에 위임 (MySQL의 AUTO INCREMENT)
@Id @GeneratedValue(strategy = GenerationType.SEQUENCE)
데이터베이스 시퀀스 오브젝트 사용 (Oracle)
@SequenceGenerator 필요
@Id @GeneratedValue(strategy = GenerationType.TABLE)
키 생성용 테이블 사용, 모든 DB에서 사용
@TableGenerator 필요
@Id @GeneratedValue(strategy = GenerationType.AUTO)
디폴트
방언(dialect)에 따라 위의 방법 중 자동 지정