kkkkkkkkkkkk
kkkkk
kkkkkkkkkkkk
전체 방문자
오늘
어제
  • 분류 전체보기
    • CS & OS
    • Algorithms
    • Laguage
    • Book
      • 객체지향의 사실과 오해
      • Effective Java
      • Spring boot 와 AWS로 혼자 구현하는 ..
      • 도메인 주도 계발 시작하기
    • DB
    • Spring
    • Spring Boot
    • JPA
    • Git
    • Clean Code
    • HTTP

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 책임
  • 설계 원칙
  • 객체지향 프로그래밍
  • 결합도
  • 응집도
  • 역할

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
kkkkkkkkkkkk

kkkkk

[Jpa] Deprecated 된 getById() 대안 getReferenceById()
JPA

[Jpa] Deprecated 된 getById() 대안 getReferenceById()

2022. 8. 2. 19:54

기존의 getById()

Spring 2.5 이전 버전에선 getOne()과 getById()란 메서드가 있었다. getOne()과 getById()는 findById()와 같은 동작을 하지만 분명한 차이점이 있다. 먼저 메서드 명으로 동작을 유추해보자.

 

getOne() 은 하나를 가져온다? 라고 해석이 된다. 뭔가 메서드 명에서 재사용 하기에 부족한 것 같은 느낌이 든다. 찾아 보니 deprecated가 되었다.

getById() 는 Id 로 부터 가져온다.? 라고 해석이 된다. findById() 는 Id 로 부터 찾아온다.? 라고 해석이 된다.

즉, getById() 는 영속성 컨텍스트에 올라가 있는 프록시 객체를 lazy 로딩으로 가져온다. findById() 는 직접 DB를 조회하여 where 절로 가져온다.

 

여기서 만약 persitant에 들어가지 않은 객체를 가져온다면?

 

 

라는 예외가 발생한다.

 

 

deprecated 된 getById() 대안으로 getReferenceById() 제공

객체 지향 프로그래밍에서 이름 짓기는 아주 중요한 요소이다. 해당 기능이 어떤 기능이 하는지 명확하게 알아볼 수 있도록 하는 장점을 가진다.

여기서 내가 생각 한 spring 2.5 이전 버전의 getById()는 사실상 영속성 컨텍스트에 참조되어 있는 프록시 객체를 가지고 오는 것이 아니라 db에서 직접 가져온다라는 기능을 가진 메서드라 생각했다.

 

메서드 명 에서 명확함 이 좀 더 필요했었던 것 같았는지 Spring 2.5 이후 부터 getById() 를 dpreacted 로 선언하였고 getReferenceById() 를 추가하였다.

 

 

 

getReferenceById() 도 getById() 와 같은 동작으로 영속성 컨텍스트에 참조되어 있는 프록시 객체를 lazy 로딩으로 가져오는데 getById() 보다 메서드 명으로 좀 더 동작을 잘 유추할 수 있게 됬다.

 

 


findById() 와 getReferenceById() 어떤 것을 사용할까?

둘의 차이점은 프록시 객체를 lazy로딩으로 가져온다는 것과 db에서 직접 조회해서 가져온다라는 것인데, 이는 서비스 로직에서 다루는 객체가 영속성 컨텍스트에 올라가 있는 객체인지 잘 판단하여 getReferenceById() 를 사용할 지 findById() 를 사용할 지 개발자가 정해야 한다.

 

 

 

 

 

 

 

참조 :

https://docs.spring.io/spring-data/jpa/docs/current/api/org/springframework/data/jpa/repository/JpaRepository.html

https://docs.spring.io/spring-data/jpa/docs/current/reference/html/

'JPA' 카테고리의 다른 글

[Jpa] 대댓글 계층구조 연관관계 메소드 이슈  (0) 2022.08.12
[Jpa] Cascade  (0) 2022.08.07
[Jpa] Transaction Propagation  (0) 2022.08.06
[Jpa] Transaction Scope and Isolation  (0) 2022.08.05
[Jpa] Dirty Checking  (0) 2022.07.19
[Jpa] Projections  (0) 2022.07.18
[Spring JPA] 트랜잭션은 언체크, 체크 예외에 대해 어떻게 커밋과 롤백을 처리할까?  (1) 2022.05.18
[Spring JPA] CASCADE 는 무엇일까?  (0) 2022.05.15
    'JPA' 카테고리의 다른 글
    • [Jpa] Transaction Propagation
    • [Jpa] Transaction Scope and Isolation
    • [Jpa] Dirty Checking
    • [Jpa] Projections
    kkkkkkkkkkkk
    kkkkkkkkkkkk

    티스토리툴바