본문 바로가기
Spring/DB연동

JPA 01

by doriver 2024. 7. 2.

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이 붙은 메소드 안에서  지연로딩과 관련 초기화를 전부 시켜줘야 한다.