JPA가 어떻게 동작하는데?
JPA는 Persistence라는 클래스가 있는데 여기서 persistence.xml 설정 정보를 읽어서 EntityManagerFactory를 만듬. 여기서 필요할 때마다 EntityManager를 찍어냄.
- JpaMain 클래스를 만듬
- JPA가 어떻게 동작하는지 살펴봄.
객체와 테이블 생성하고 매핑하기
Member.java
@Entity
public class Member {
@Id
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;
}
}
회원 등록
JpaMain.java
public class JpaMain {
public static void main(String[] args) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("practice");
EntityManager em = emf.createEntityManager();
EntityTransaction tx = em.getTransaction();
tx.begin();
try {
Member member1 = new Member();
Member member2 = new Member();
member1.setId(1L);
member2.setId(2L);
member1.setName("helloA");
member2.setName("helloB");
em.persist(member1);
em.persist(member2);
Member findMember = em.find(Member.class, 1L);
System.out.println("findMember id = " + findMember.getId());
tx.commit();
} catch (Exception e){
tx.rollback();
} finally {
em.close();
}
emf.close();
}
}
회원 수정
public class JpaMain {
public static void main(String[] args) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("practice");
EntityManager em = emf.createEntityManager();
EntityTransaction tx = em.getTransaction();
tx.begin();
try {
Member findMember = em.find(Member.class, 1L);
findMember.setName("HelloJPA");
tx.commit();
} catch (Exception e){
tx.rollback();
} finally {
em.close();
}
emf.close();
}
}
주의!
엔티티 매니저는 쓰레드 간에 공유하면 안됨.
JPA의 모든 데이터 변경은 트랜잭션 안에서 실행.
'Spring > JPA' 카테고리의 다른 글
엔티티 매핑 (0) | 2023.02.19 |
---|---|
영속성 관리 - 내부 동작 방식 (0) | 2023.02.18 |
JPA 프로젝트 생성 (0) | 2023.02.18 |
프록시와 연관관계 관리 - 영속성 전이(CASCADE)와 고아 객체 (0) | 2023.02.10 |
프록시와 연관관계 관리 - 즉시 로딩과 지연 로딩 (0) | 2023.02.10 |