본문 바로가기
Study/JPA

[JPA] DB에 데이터 넣어보기

by DevJaewoo 2022. 2. 26.
반응형

JPA Hibernate LOGO

DB에 데이터 넣어보기

이전 시간에 아래의 코드를 작성했다.

public class JpaMain {
    public static void main(String[] args) {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");
        EntityManager em = emf.createEntityManager();
        EntityTransaction tx = em.getTransaction();
        
        tx.begin();

        //code

        tx.commit();
        
        em.close();
        emf.close();
    }
}

 

이번 시간에는 코드에 들어간 클래스들에 대해 간단히 정리하고 넘어가고자 한다.

 

EntityManagerFactory

  • 애플리케이션 로딩 시점에 DB당 딱 하나만 생성되어야 한다.
  • persistence.xml의 정보를 통해 생성되기 때문에, persistence.xml필수 속성들을 반드시 정의해줘야 한다.

 

EntityManager

  • 트랜잭션을 수행시키기 위해 EntityManagerFactory로부터 DB 커넥션을 하나 생성받는 개념이다.
  • 필요할 때마다 EntityManagerFactory로부터 발급받고, 사용 후에 close()를 호출해 반납한다.
  • 쓰레드 간에 절대 공유하면 안된다.

 

EntityTransaction

  • JPA의 데이터를 변경하는 모든 작업은 반드시 트랜잭션 안에서 수행되어야 한다.
  • 완료되면 Commit을 해주고, 문제가 생기면 Rollback을 해줘야 한다.

 

JPA 테스트를 위해 Member 클래스를 만들었다.

import javax.persistence.*;

@Entity
public class Member {

    @Id
    private Long id;

    @Column
    private String name;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

 

JAVA에서 사용하던 일반적인 클래스와의 차이점이 3가지가 있다.

  • @Entity: 클래스를 엔티티로 등록한다. 클래스 명과 일치하는 테이블이 DB에 있어야 하며, 이제 클래스 단위로 DB에 데이터를 넣고 꺼낼 수 있다.
  • @Id: 아래의 멤버변수를 Column으로 만들고, Primary Key로 설정한다.
  • @Column: 아래의 멤버 변수를 Column으로 만든다.

 

그리고 위의 클래스를 사용해 DB에 데이터를 삽입하는 코드를 만들어봤다.

오류가 발생했을 때 Rollback 시키는 코드도 작성했다.

public class JpaMain {
    public static void main(String[] args) {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");

        EntityManager em = emf.createEntityManager();

        EntityTransaction tx = em.getTransaction();
        tx.begin();

        try {
            //code
            Member member = new Member();
            member.setId(1L);
            member.setName("hello");
            em.persist(member);

            tx.commit();
        }
        catch (Exception e) {
            tx.rollback();
        }
        finally {
            em.close();
        }
        
        emf.close();
    }
}

 

DB에 데이터가 잘 들어간것을 볼 수 있다.

DB 데이터 삽입 결과


출처

반응형

'Study > JPA' 카테고리의 다른 글

[JPA] 상속관계 매핑  (0) 2022.08.26
[JPA] 연관관계 매핑  (0) 2022.08.25
[JPA] Entity 필드, 컬럼 매핑  (0) 2022.03.05
[JPA] 영속성 컨텍스트  (0) 2022.03.05
[JPA] JPA 프로젝트 설정  (0) 2022.02.26