JPA 기본 동작 방식

김혁준·2024년 6월 26일

JPA

목록 보기
2/16

0. JPA 기본 구동 방식

1. 객체와 테이블을 생성하고 매핑

@Entity : JPA가 관리할 객체
@Id : 데이터베이스 PK와 매핑

2. 기본 코드

public static void main(String[] args) {

		//엔티티매니저 팩토리 생성. 어플리케이션당 한개 만든다
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");
        
        // 엔티티매니저 생성
        EntityManager em = emf.createEntityManager();
        
        //트랜잭션 획득
        EntityTransaction tx = em.getTransaction();
        
        //트랜잭션 시작
        tx.begin();
        
        try {
        
        	//엔티티매니저를 통해 DB에 쿼리문을 날리고 마지막에 커밋
            Member findMember = em.find(Member.class,2L);
            findMember.setName("123");
            tx.commit();
        } catch (Exception e) {
        	//문제가 생기면 롤백
            tx.rollback();
        } finally {
        	//성공하든 실패하든 무조건 매니저 반환
            em.close();
        }
        
        // 어플이 끝나면 팩토리도 반환
        emf.close();
    }

주의 사항

엔티티 매니저 팩토리는 하나만 생성해서 어플 전체에서 공유해야한다
엔티티 매니저는 쓰레드간에 공유하면 안되고 사용후에 버려야 한다
JPA의 모든 데이터 변경은 트랜잭션 안에서 실행된다

JPQL

조건이 들어간 검색 결과를 얻고 싶을때 쿼리를 직접 날려야 하는데 ORM 세상이므로 SQL 문법이 아니라 JPQL을 쓴다.
JPQL은 JPA가 SQL을 추상화한 객체 지향 쿼리 언어이다.
JPQL은 엔티티 객체를 대상으로 쿼리한다면 SQL은 데이터베이스 테이블을 대상으로 쿼리한다.
따라서 특정 데이터베이스 SQL에 의존하지 않는다. 한마디로 객체 지향 SQL이다.
가장 단순한 조회 방법으로 EntityManager.find()를 통해 실행한다.

예시

public static void main(String[] args) {

        EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");
        EntityManager em = emf.createEntityManager();
        EntityTransaction tx = em.getTransaction();
        tx.begin();
        try {
        
        	// JPQL 실행 부분
            List<Member> result = em.createQuery("select m from Member  as m",Member.class)
                    .setFirstResult(5)
                    .setMaxResults(8)
                    .getResultList();
                    
            for (Member member : result) {
                System.out.println("Member.name = "+member.getName());
            }
            tx.commit();
        } catch (Exception e) {
            tx.rollback();
        } finally {
            em.close();
        }
        emf.close();
    }

출처 : 인프런 자바 ORM 표준 JPA 프로그래밍 - 기본편

https://www.inflearn.com/course/ORM-JPA-Basic/dashboard

0개의 댓글