개발공부/[Spring]김영한_ORM표준 JPA프로그래밍

[애플리케이션 개발]persistence_entityManagerFactory, 엔티티 생성

개발자 덕구🐾 2022. 8. 23. 17:13
728x90

 

 

JPA에는 persistence가 있다. 

persistence는 persistence.xml에서의 정보를 가지고 EntityManagerFactory를 만든다.

EntityManagerFactory는 EntityManager를 만든다. 

 

 

 

EntityManagerFactory 는 딱 하나만 만들어야한다. 

일관적인 단위를 하나 할 때는 EntityManager 이용 (고객의 요청이 올 때마다)

EntityManager 는 쓰레드간 공유 X , 사용하면 버려야함 

 

 

 

 

JPA를 사용하면  내부에서 JDBC API를 사용해 SQL를 호출하여 DB와 통신한다. 

 

 

 

 


 

 

 

 

 

 

아래 어노테이션을 사용해 엔티티를 생성한다. 

 

https://what-am-i.tistory.com/357?category=1083625 

 

@Entity, @Table, @Enumerated, @Id, @GeneratedValue

1. @Entity @Entity가 붙은 클래스는 JPA가 관리하는 클래스이다. 꼭 기본 생성자가 있어야한다. 2. @Table 엔티티와 매핑할 테이블을 지정하는 어노테이션이다. 속성으로 name = "" 으로 매핑할 테이블 이

what-am-i.tistory.com

 

 

@Entity
public class Member {

    @Id @GeneratedValue
    private Long id;
    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;
    }
}

 

 

위 코드처럼 Member entity를 만들기만 하면 연결된 DB (h2)에 Member라는 테이블이 생성된다. 

 

 

원래 Member가 있더라도 방금 만든 Member로 대체된다. 

그 이유는 persistence.xml에서 hibernate.hbm2ddl.auto의 value가 create이기 때문이다.

 

 

 

 

 

운영 장비에는 다 사용하지않는것을 추천한다.

 

<개발 초기>

create : 기존 테이블 삭제 후 다시 생성 , 로딩 시점에 기존에 있던 동일한 이름의 테이블을 지우고 새로  만든다. 

 

create-drop : create와 같으나 종료될 때 drop

 

<테스트 서버>

update : 변경만 반영  ( 지우는 건 무시)

validate : 매핑 확인만 

 

 

 

 


 

 

 

 

 

JPA에서 데이터를 변경하는 모든 작업은 트랜잭션 내에서 해야한다. 

EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");
EntityManager em = emf.createEntityManager();
EntityTransaction tx = em.getTransaction();
tx.begin();
//트랜잭션 시작 

// DB 접근 코드 

// 커밋 
tx.commit();

 

생성할 때는 em.persist 

조회할 때는 em.find(class종류, 해당 클래스의 PK)

삭제할 때는 em.remove 

수정할 때는 em.find로 찾아서 변경 (+ 변경후 저장은 안해도 된다.)

 

 

 

createEntityManagerFactory("hello")에서 hello의 이유는 

persistence.xml에서 hello로 이름을 지정하였기 때문이다. 

<persistence-unit name="hello">

 

 

 

참고 블로그 :

김영한 ORM 강의 

 

https://velog.io/@modsiw/JPAJava-Persistence-API%EC%9D%98-%EA%B0%9C%EB%85%90

 

JPA(Java Persistence API)의 개념

자바 ORM 기술에 대한 표준 명세로, JAVA에서 제공하는 API이다. 스프링에서 제공하는것이 아니다.자바 어플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스다.여기서 중

velog.io

 

반응형