1.
save() 메서드는 엔티티를 데이터베이스에 저장하거나 업데이트함
일반적으로 save()메서드는 저장된 엔티티를 반환함
실패한 경우 null이나 특정 값을 반환하지 않고, 예외가 발생
예외 처리를 통해 실패 상황을 관리필요 ex) try-catch 블록
2.
@Query
@Query를 사용해 직접 쿼리를 작성
복잡한 쿼리를 작성해야 할 때
, 또는 JPA 메소드 네이밍 규칙으로 표현하기 어려운 쿼리를 정의할 때
, JPA가 생성하는 기본 쿼리가 성능상 최적화가 필요할 때
특정 필드만을 선택해야 하는 경우 @Query를 사용하는 것이 더 적합
3.
jpa . open-in-view: true
Committing JPA transaction on EntityManager
Not closing pre-bound JPA EntityManager after transaction
> 트랜잭션이 끝나도 DB connection도 반납되지 않는다
Client에게 응답이 되고 난 후에 DB 커넥션을 반납
지연로딩을 @Transactional 을 벗어난 곳에서도 할 수 있는 유연함을 챙길 수 있다.
jpa . open-in-view : false
Committing JPA transaction on EntityManager
Closing JPA EntityManager after ~
Creating new transaction with name ~
Opened new EntityManager ~
> 트랜잭션이 끝났을 때 DB connection도 반납 됩
open-in-view 를 false로 설정하면 DB Connection이 해제되지 않는 문제는 해결
다만, 그럴 경우에는 lazy loading을 사용할 때 문제가 발생할 수 있다.
EntityManger 가 transaction의 commit과 함께 닫히기 때문에, 트랜잭션 외부에서 lazy loading 을 사용하면 no Session 이라는 예외가 발생하게 됩니다.
사용량이 많은 서비스를 제공하는 어플리케이션 에서는 false로 두어 DB 커넥션을 바로 반납하게 하여, 마르지 않도록 하는 것이 좋으며,
(필요에 따라) @Transaciotnal이 붙은 메소드 안에서 지연로딩과 관련 초기화를 전부 시켜줘야 한다.
'Spring > DB연동' 카테고리의 다른 글
| (JPA의 CRUD메서드) ~ (DB에서 SQL문 수행) 까지의 과정 (0) | 2024.10.19 |
|---|---|
| Querydsl 01 (0) | 2024.07.04 |
| SpringBoot에서 Redis로 Cache기능 구현하기 (0) | 2024.06.25 |
| SpringBoot에서 Redis로 데이터 저장,조회 (0) | 2024.06.24 |
| [JPA] @Entity 에서 컬럼이름 스네이크케이스로 자동변환됨 (0) | 2024.05.23 |