이 책은 JPA 구현체로 하이버네이트를 사용한다(hibernate version.4.3.10.Final) JPA 구현체로 하이버네이트를 사용하기 위한 핵심 라이브러리
- hibernate-core: 하비어베니트 라이브러리
- hibernate-entitymanager: 하이버네이트가 JPA 구현체로 동작하도록 JPA 표준을 구현
- hibernate-jpa-2.1-api:JAP 2.1 표준 API를 모아둔 라이브러리
[객체 매핑]
- @Entity : 클래스를 테이블과 매핑한다고 JPA에게 알려준다. @Entity가 사용된 클래슬르 엔티티 클래스라 한다.
- @Table : 엔티티 클래스에 매핑할 테이블 정보를 알려준다.
- @Id : 엔티티 클래스의 필드를 테이블의 기본키에 매핑한다. @Id가 사용된 필드를 식별자 필드라 한다.
-
@Column 필드를 컬럼에 매핑한다.
- 매핑 어노테이션을 생략하면 필드명을 사용해서 컬럼명으로 매핑한다.
- 대소문자를 구분하는 데이터베이스를 사용하면 @Column(name=”AGE”)처럼 명시적으로 매핑해야 한다.
persistence.xml을 사용해서 필요한 설정 정보를 관리. META-INF/persistence.xml 클래스 패스 경로에 있으면 자동 인식
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence" version="2.1">
<persistence-unit name="jpabook"> <!-- 데이터베이스당 하나의 영속성 유닛을 등록 -->
<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" />
<!-- 옵션 -->
<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.id.new_generator_mappings" value="true" />
<!--<property name="hibernate.hbm2ddl.auto" value="create" />-->
</properties>
</persistence-unit>
</persistence>
엔티티 매니저 설정
- 엔티티 매니저 팩토리 생성
EntityManagerFactory emf = Persistence.createEntityManagerFactory("jpabook");
엔티티 매니저 팩토리는 애플리케이션 전체에서 딱 한 번만 생성하고 공유해서 사용해야 한다.
- 엔티티 매니저 생성
EntityManager em = emf.createEntityManager();
- 트랜잭션 관리 항상 트랜젝션 안에서 데이터를 변경해야 한다.
EntityTransaction tx = em.getTransaction(); //트랜잭션 기능 획득
try {
tx.begin(); //트랜잭션 시작
logic(em); //비즈니스 로직
tx.commit();//트랜잭션 커밋
} catch (Exception e) {
e.printStackTrace();
tx.rollback(); //트랜잭션 롤백
} finally {
em.close(); //엔티티 매니저 종료
}
- 비즈니스 로직
- 등록 em.persist(member);
- 수정 member.setAge(20);
- 삭제 remove();
- 한 건 조회 find();
- JPQL
JPQL은 엔티티 객체를 대상으로 쿼리한다.
TypedQuery<Member> query = em.createQuery("select m from Member m", Member.class); List<Member> members = query.getResultList();
출처 : 자바 ORM 표준 JPA 프로그래밍 김영한 지음