Projection
엔티티의 일부 데이터만 가져올때 사용된다.
지금까진 모든 컬럼을 가져왔다.
인터페이스 기반과 클래스 기반이 있다.
인터페이스 기반
Closed 프로젝션과 Open 프로젝션으로 나눌 수 있다.
Closed 프로젝션은 밑 예제처럼
한정적인 것만 가져온다.
Comment 객체에서 가져올 것들만 interface 로 만든다
리턴 타입을 바꿔준다.
Sql 도 최적화가 된다 . 필요한 컬럼들만 select 를 함
Open 프로젝션은
사실상 다 가져온담에 조합을해서
내가 보고싶은것만 보는것.
연산도 가능함. 하지만 쿼리 최적화 안됨
@Value 로 설정을 한다.
이렇게 쓰면 쿼리도 최적화하고
커스텀하게 연산도 가능해진다.
클래스 기반도 똑같다.
하지만 코드만 더 많아짐
Specifications
쿼리DSL 과 흡사하다
Predicate 를 이용해서 쿼리 코드를 간단하게 만들 수 있는데,
이건 나중에 필요해지면 다시 보도록하자
spring data JPA - 트랜잭션
스프링 프레임워크의 트랜잭션과 거의 동일하다
기본적으로 모든 레포지토리들은 @Transactional 이 다 들어가잇다.
트랜잭션이 언제 발생하냐 하면
RuntimeException 과 Error 가 발생하면 트랜잭션을 롤백시킨다.
checked Exception 은 롤백시키지 않는다.
checkedException 이지만 롤백시키고 싶다 할때는,
rollbackFor ,이나 rollbackForclassName 로 붙여준다.
기본적으로는 JpaTransactionManager 를 사용한다.
readOnly 를 써서 최적화 시킬 수 있어서 데이터 변경이 없으면
readOnly 를 주면 좋다
Isolation 설정이 있다.
여러개의 트랜잭션이 동시에 DB에 접근 했을때
트랜잭션을 어떻게 처리할것인지 제어설정이다.
non-repeatable 다시 조회했는데 똑같은 같이 안나온다던가
phantom read - 값이 사라졌다든가
하는 현상이 발생할 수 있다.
READ_UNCOMMITTED 가 성능은 좋지만,
데이터가 사라질지 안사라질지 모른다.
다른 트랜잭션이 읽어 갈 여지가 생긴다.
기본값은 DB 의 기본값을 따른다
H2 의 경우엔응 READ_COMMITED 가 기본값으로 되어있다.
'Spring > jpa' 카테고리의 다른 글
[spring data jpa] spring data - jpa (0) | 2020.12.18 |
---|---|
[spring data jpa] spring data common - web (0) | 2020.12.17 |
[spring data jpa] spring data jpa - common2 (0) | 2020.12.17 |
[spring data jpa] spring data - Common (0) | 2020.12.17 |
[spring data jpa] spring data jpa 소개 및 원리 (0) | 2020.12.17 |