일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- springbootproxy
- OSIV
- JPAmapping
- gitinitial
- jpqlquery
- 제이피큐엘쿼리
- 이해와 원리
- JPA Hint & Lock
- embededtype
- springboot기본설정
- dockercmd
- MySqlType
- spring
- 스프링부트
- JPA프록시
- sql
- 자바제너릭
- 에이치투데이터베이스
- 임베디드타입
- Open EntityManager
- 데이터베이트h2
- JPAproxy
- 스프링부트기본설정
- httppie
- JPA값타입
- JDBC connection pool
- springbootH2
- jpa
- javageneric
- Git
Archives
- Today
- Total
빡코
[스프링데이터JPA] 스프링테이터 JPA 분석 본문
@Repository적용: JPA 예외를 스프링이 추상화한예외로 변환
@Transactional트랜잭션적용
JPA의 모든 변경은 트랜잭션 안에서 동작
스프링데이터 JPA는 변경(등록, 수정, 삭제) 메서드를 트랜잭션처리서
비스계층에서 트랜잭션을 시작하지 않으면 리파지토리에서 트랜잭션시작
서비스계층에서 트랜잭션을 시작하면 리파지토리는해당트랜잭션을전파받아서 사용
그래서 스프링데이터 JPA를 사용할 때트랜잭션이 없어도 데이터등록, 변경이 가능했음
(사실은 트랜잭션이 리포지토리계층에 걸려있는 것임)
@Transactional(readOnly = true)
데이터를 단순히 조회만 하고 변경하지 않는 트랜잭션에서 readOnly = true옵션을 사용하면 플러시를 생략해서 약간의 성능향상을 얻을 수 있음
자세한 내용은 JPA 책 15.4.2 읽기 전용쿼리의 성능최적화참고
*save()메서드
-새로운엔티티면저장(persist)
-새로운엔티티가아니면병합(merge)
/*
* (non-Javadoc)
* @see org.springframework.data.repository.CrudRepository#save(java.lang.Object)
*/
@Transactional
@Override
public <S extends T> S save(S entity) {
if (entityInformation.isNew(entity)) {
em.persist(entity);
return entity;
} else {
return em.merge(entity);
}
}
'Java > JPA' 카테고리의 다른 글
[querydsl] 스프링부트 3.0 + java 17 build.gradle 설정 파일 (0) | 2023.05.31 |
---|---|
[스프링데이터JPA] 새로운 엔티티(Entity)를 구별하는 방법 (0) | 2023.05.12 |
[스프링데이터 JPA] Web 확장 - 도메인클래스컨버터, 페이징과 정렬 (0) | 2023.05.12 |
[스프링데이터 JPA] Auditing (0) | 2023.05.11 |
[스프링 데이터 JPA] 사용자 정의 리포지토리 구현 (0) | 2023.05.11 |