seong
JPA의 Repository 본문
JPA와 Hibernate
Hibernate는 JPA의 구현체중 일부이다.
이전까지 MyBatis를 사용해 DB를 관리했었다. 하지만 JPA에서는 Hibernate를 통해 DB를 관리할 것이다.
기존의 MyBatis에서는 Dao 전략을 사용 했지만 JPA에서는 EntityManager를 사용한 Repository전략을 사용 한다.
Mybatis와 구조는 거의 대부분 비슷하다. 다른점이 하나 있다면 Persistence Context가 생겼다.
<실행 순서>
1. 클라이언트가 요청을 진행 하면 Service에서 Transaction이 발동된다.
2. Repository에서는 요청(Request)이 들어온 객체를 DB에 바로 전달 하지 않고 PC(Persistence Context)에 저장해두게 되고 요청에 대한 응답(Reponse)을 한다. 이 저장되는 과정을 영속화(Persistence) 라고한다.
3. Service에서 Transaction이 종료 되면 PC에서 flush가 되어 DB로 저장되게 된다.
<Update의 예시>
1. Update의 요청이 쭉 들어와 PC로 간다.
2-1.만약 PC에 Board객체가 이미 있다면 PC의 해당 Board객체 -> 요청된 Board객체로 Update를 한다.
2-2. 만약 PC에 Board객체가 없다면 DB로 가서 Update할 해당 객체를 가지고 와 PC에 저장한다 (영속화)
3. 이후 응답을 하고 Transaction이 종료되는 시점에 Update된 Board객체를 -> DB로 Flush를 한다.
JPA의 Repository를 작성할때 주의사항
1. @Repository 어노테이션을 써주지 않으면 스캔되지 않아 IOC 컨테이너에 등록되지 않는다 .
쓰지 않았을 때 예시
메모리에 떠있지 않다는 부분이다.즉, IOC컨테이너에 없다는 말이다.
2. Service에는 항상 @Transactional을 사용해야한다.
Repository전략의 핵심은 트랜젝션 관리이다. 그러므로 항상 걸어주어야 한다!
'JPA' 카테고리의 다른 글
JPA CRUD DTO로 변환 하기 - 예제1. findById (0) | 2022.10.25 |
---|---|
Spring의 OSIV 정책 (0) | 2022.10.24 |
JPA 마리아 DB에서 오토 시퀀스 작성 - GenerationType.IDENTITY (0) | 2022.10.21 |
JPA 자바코드로 테이블생성하기 (0) | 2022.10.21 |
VS에서 DB H2 -> MariaDB로 변경 (0) | 2022.10.21 |