이 책은 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>

엔티티 매니저 설정

  1. 엔티티 매니저 팩토리 생성
    EntityManagerFactory emf = Persistence.createEntityManagerFactory("jpabook");
    

    엔티티 매니저 팩토리는 애플리케이션 전체에서 딱 한 번만 생성하고 공유해서 사용해야 한다.

  2. 엔티티 매니저 생성
    EntityManager em = emf.createEntityManager();
    
  3. 트랜잭션 관리 항상 트랜젝션 안에서 데이터를 변경해야 한다.
EntityTransaction tx = em.getTransaction(); //트랜잭션 기능 획득
try {


    tx.begin(); //트랜잭션 시작
    logic(em);  //비즈니스 로직
    tx.commit();//트랜잭션 커밋

} catch (Exception e) {
    e.printStackTrace();
    tx.rollback(); //트랜잭션 롤백
} finally {
    em.close(); //엔티티 매니저 종료
}
  1. 비즈니스 로직
    • 등록 em.persist(member);
    • 수정 member.setAge(20);
    • 삭제 remove();
    • 한 건 조회 find();
  2. JPQL JPQL은 엔티티 객체를 대상으로 쿼리한다.
    TypedQuery<Member> query = em.createQuery("select m from Member m", Member.class);
    List<Member> members = query.getResultList();
    


출처 : 자바 ORM 표준 JPA 프로그래밍 김영한 지음