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
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
'개발공부 > [Spring]김영한_ORM표준 JPA프로그래밍' 카테고리의 다른 글
[다대일, N:1]양방향 연관관계 설정하기 _Order와 Member (0) | 2022.09.01 |
---|---|
영속성 컨텍스트, 엔티티의 생명주기 (0) | 2022.08.23 |
[spring]JPQL이 뭔가요?(파라미터와 select) (0) | 2022.08.18 |
[spring] 양방향 연관관계&연관관계의 주인 (0) | 2022.08.18 |
[spring]단방향 연관관계 (0) | 2022.08.18 |