본문 바로가기
프로그래밍/SPRING

JPA 관련 정리

by 두둠칫 2022. 6. 1.

1. Repository

1) @JpaRepository : CRUD 기능 제공

 

2) @Repository : 구현 기능 없음, 다음과 같은 경우에 활용함

→ select만 구현하고 싶은 경우 @JpaRepository를 쓰지않고 사용하여 직접 select만 구현

→ @NoRepositoryBean 처리해서 bean으로 등록되지 않도록 

 

3) @Query : 임의로 쿼리 만들고 싶을 때

 

 

2. Entity, DataSource

1) Entity

- DB에 저장(Persist)할 자바 객체를 정의

- 테이블 스키마와 완벽히 일치할 필요X

- 하나의 도메인으로 간주

- sequence, data 등 jpa에서 자동으로 설정해주는 어노테이션 제공

 

2) DataSource

- 물리적인 데이터소스(DB) 정보를 담는 interface

- 하나의 물리 DB를 표현

- 다양한 구현체를 사용

 

 

3. Transaction

1) TransactionManager

- 스프링 트랜잭션 관리 기능을 담당하는 interface

- 용도에 따라 다양한 인터페이스와 구현체들

 

2) JPA DB 수동설정(Java Code)

- 자바코드로 DataSource, TransactionManager를 수동 세팅해야하는 경우가 있다

ex) configuation properties로 커버되지 않는 세밀한 옵션을 줄 때, 다중 DataSource를 사용할 때

- 세팅해야하는 요소

: DataSource

, EntityMangaerFactory(→LocalContainerEntityMnagerFactoryBean : 추가적인 예외 처리 기능 때문에, 인터페이스 말고 구현체를 직접 빈으로 등록해야한다)

, Platform TransactionManger

- 세팅 구성

: DataSource(DB설정) → EntityMangerFactory(JPA entity 관리) → PlatformTransactionManager(트랜잭션관리)

 

3) @Transactional

- 스프링이 annotation 기반 트랜잭션 관리 기능 제공

- @JpaRepositary는 이미 메소드단위로 @Transactionl이 선언되어 있음

- Business logic(service단 method)에 적용

- Transacation annotation

 

4) @Transaction 제공 옵션

- transactionManager(value) : 사용할 transaction mangaer 이름 특정

- label : transaction을 구분짓고 식별하는 레이블

- propagation : transaction이 중첩될 경우 동작 규칙(default : REQUIRED)

- isolation : transaction 내부 데이터의 격리 레벨(default : DEFAULT)

- timeout, timeoutString : 시간 제한 설정

- readOnly : 해당 transaction 에서는 select만 수행된다 를 표현

+ 강제성이 없음(like 힌트), 

 

참고)

 

[Spring] Transactional 정리 및 예제

[Spring] @Transactional 정리 및 예제 안녕하세요. 갓대희 입니다. 이번 포스팅은 [ 스프링 어노테이션 @Transactional  ] 입니다. : ) 들어가기 앞서...... SI를 할때, 현재 어느 쇼핑몰 운영을 맡으며 개..

goddaehee.tistory.com

 

'프로그래밍 > SPRING' 카테고리의 다른 글

[SPRING] RestTemplate, SSL, TLS, Proxy(+UrlConnection, HttpClient, WebClient)  (0) 2022.09.19
[SPRING] 대량 Insert : mybatis foreach vs sqlSession batch  (0) 2022.08.02
한끝완3  (0) 2022.05.27
한끝완2  (0) 2022.05.23
한끝완1  (0) 2022.02.20