• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

jpa repository.save 메서드 구현 코드를 보고 싶습니다

23.03.23 06:57 작성 23.03.23 07:34 수정 조회수 560

1

강사님 안녕하세요~

 

회사에서

jpa 사용하면서 깊이 생각 안하고 사용하다가

궁금한점이 생겼습니다

 

특정 리포지토리가 있다고 가정하겠습니다

@Repository

public interface 리포지토리 extends JpaRepository<도메인, Long>, JpaSpecificationExecutor<도메인> {

 

리포지토리.save();

 

하면 스프링프레임웍 하이버네이트 구현체가 실행해준다고 하는데

저는 실제 프레임웍 구현체 소스 코드를 보고 싶습니다

제가 IDE 이클립스를 사용중인데 어디라이브러리나

소스 코드를 보면 될까요

리포지토리.save() -> █이메서드를 클릭하면

org.springframework.data.repository.CrudRepository 다시 인터페이스이고

 

@NoRepositoryBean

public interface CrudRepository<T, ID> extends Repository<T, ID> {

<S extends T> S save(S entity);

=> █ CrudRepository 인터페이스의 save 메서드를 구현코드는

또 어느라이브러리에 어떤 메서드를 확인하면 될까요?

 

 

*.스프링, 스프링부트 강의 수강하며 계속 반복되는 얘기가

유연하게 적용하기위해 많은 인터페이스를 사용하고

구현체가 있다고 계속 얘기되는데

그럼 그런 구현체를 최 하위의 클래스 메서드를 보는 방법이 어떻게 되는지 궁금하네요..

 

 

*.추가적으로 소스코드에는

리포지토리.save(); =>인터페이스.save();

인터페이스.메서드 를 호출했는데

스프링 프레임웍에서 어떤 원리로

인터페이스.메서드 => 구현체클래스.메서드가 호출되는지

이해가 가지 않습니다

 

바쁘시겠지만 시간 나실때 답변 주시면 감사하겠습니다

수고하세요..

 

#JPA

#구현체

#하이버네이트

#hibernate

 

답변 1

답변을 작성해보세요.

0

y2gcoder님의 프로필

y2gcoder

2023.03.23

안녕하세요, 김동희 님. 공식 서포터즈 y2gcoder 입니다.

org.springframework.data.jpa.repository.support.SimpleJpaRepository의 save() 메서드를 보시겠습니까?

image

내부에서는 저희가 본 강의에서 배우는 EntityManager를 이용하고 있는 모습을 보실 수 있습니다.

감사합니다.

김동희님의 프로필

김동희

질문자

2023.03.23

y2coder 님 감사합니다~

혹시

*.추가적으로 소스코드에는

리포지토리.save(); =>인터페이스.save();

인터페이스.메서드 를 호출했는데

스프링 프레임웍에서 어떤 원리로

인터페이스.메서드 => 구현체클래스.메서드가 호출되는지

이해가 가지 않습니다

====> 이 부분에 대해서도 여쭤봐도 될까요?

y2gcoder님의 프로필

y2gcoder

2023.03.23

해당 부분은 스프링에서 컨테이너를 올려 빈을 등록할 때,
저희가 만든 JpaRepository를 상속한 Repository 인터페이스를 찾은 뒤 해당 인터페이스를 기반으로 SimpleJpaRepository 같은 실제 구현체를 동적으로 만들어 작동합니다.

김동희님의 프로필

김동희

질문자

2023.03.23

y2coder 님 감사합니다

다시 소스 보도록 하겠습니다

image

y2gcoder님의 프로필

y2gcoder

2023.03.23

파이팅입니다!