728x90
객체와 테이블 생성하고 매핑
@Entity
- JPA가 관리할 객체
- jpa가 시작될 때 이 객체를 사용할 것이라고 인식
@Id
- 데이터베이스 PK와 매핑
- PK가 뭔지 알려주기 위해 적어주는 것
@Table
- 엔티티의 테이블명 수동으로 지정 (@Table(name="NAME"))
@Colum
- 쿼리문 나갈 때 칼럼 이름 지
JPA 사용 시 알아야 되는 것
엔티티 매니저 팩토리는 하나만 생성해서 애플리케이션 전체에서 공유한다.
- 엔티티 매니저 팩토리는 애플리케이션 로딩 시점에 한개만 들어여야 한다.
엔티티 매니저는 쓰레드간에 공유하지 않는다.
- 트랜잭션마다 엔티티 매니저를 만들어줘야한다.
JPA의 모든 데이터 변경은 트랜잭션 안에서 실행해야 한다
- jpa에서 모든 데이터를 변경하는 모든 작업은 트랜잭션 안에서 작업해야 한다.
jpa 정석 코드 예제
EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");
EntityManager em = emf.createEntityManager();
EntityTransaction tx = em.getTransaction();
tx.begin();
try {
//entityManager.close() 전에 code 작성
Member member = new Member();
member.setId(1L);
member.setName("HelloA");
em.persist(member); //member 저장
tx.commit();
} catch (Exception e) {
tx.rollback();
} finally {
em.close();
}
emf.close(); //애플리케이션이 완전히 종료되면 emf.close()
Persistence.createEntityFactory("hello"): 엔티티 매니저 팩토리 생성
emf.close: 엔티티 매니저를 사용했으면 무조건 닫아주기
cath: 에러 잡아주기
em.persist: 객체 저장하기
JPA를 통해서 db 값 수정
findMember.setName("HelloJpa") 해서 객체 값 수정하고 em.persist()하지 않아도 db에 값도 같이 수정된다.
jpa를 통해서 엔티티를 가져오면 그 엔티티는 jpa가 관리하게 된다. 그리고 jpa가 트랜잭션 commit한 시점을 다 체크한다.
그래서 데이터에 변동이 생기면 update쿼리를 만들어서 db에 날리게 된다. (commit 하기 전에 쿼리 만들었다가 트랜잭션 commit하면 그때 쿼리를 날린다)
728x90
'JPA' 카테고리의 다른 글
연관관계 매핑 기초 (0) | 2023.11.02 |
---|---|
엔티티 매핑 (1) | 2023.10.29 |
영속성 관리 - JPA 내부 동작 방식 (0) | 2023.10.28 |
플러시 (0) | 2023.10.28 |
JPA 기본 설정 (0) | 2023.10.28 |