반응형
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에 데이터가 잘 들어간것을 볼 수 있다.
출처
반응형
'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 |