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)에 따라 위의 방법 중 자동 지정