inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

자바 ORM 표준 JPA 프로그래밍 - 기본편

다대다 [N:M]

jpa 질문있습니다

332

vnfthr

작성한 질문수 37

0

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.

1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]
여기에 질문 내용을 남겨주세요.

 

JPA가 인터페이스이고

하이버네이트나 OpenJpa같은 구현체들이 있고

javax.persistence.* 패키지에서 제공 하는 JPA인터페이스 어노테이션들 ( ex @Id, @JoinColumn , @ManyToOne등등 )

이것들은 JPA가 제공하는것들이고,

구현체가 제공하는 어노테이션들 ( ex 하이버네이트의 import org.hibernate.annotations. 패키지 @JoinFormula()등 )

이것들은 하이버네이트가 제공하는 어노테이션이라는걸 인지 했습니다

여기서 궁금한게

제 상식으로는 인터페이스는 독단적으로 사용 할 수 없는것으로 알고 있는데

지금 영한님이 설명해주시는 예제들은 하이버네이트가 제공하는 패키지들에 있는 어노테이션을 사용하지 않고 jpa가 제공하는 패키지의 어노테이션들 ( javax.persistence.* 의 @ManyToOne 등등)만 사용해서 예제를 만들고 계신데 이렇게 되면 구현체 없이 jpa라는 인터페이스만으로 개발을 한거라고 이해가 되는데 이게 맞는 걸까요? 맞다면 어떻게 가능한거고 , 여기서 하이버네이트 의존성을 지워버려도 개발이 가능한지도 여쭤보고 싶습니다. 감사합니다.

 

 

java jpa

답변 1

0

y2gcoder

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

알고 계신 것처럼 JPA는 Java API로서 인터페이스의 집합입니다. 당연하게 실제 동작을 위해서는 하이버네이트 등의 구현체가 필요합니다. JPA에서 제공해주는 애노테이션을 JPA에서 처리할 수도 있지만, 결국 실제 동작을 위해서는 하이버네이트가 필요합니다.

JPA와 하이버네이트를 아예 별개라고 생각하지 마시고 인터페이스:구현체의 관계라고 생각해본다면, 클라이언트 입장에서 인터페이스만 알고 있다고 해서 작동하지 않을지 생각해보시면 더 이해가 쉬우실 것 같습니다. 클라이언트는 인터페이스만 알고, 해당 인터페이스의 메서드를 호출하면, 구현체에 대해 알지 못하더라도 DI 등의 기술로 인해 실제 구현체가 동작하게 됩니다. 이와 같이 우리 눈에 보이지 않지만 인터페이스에 대한 실제 구현체가 작동하는 부분이 있다고 생각해주시면 감사하겠습니다!

감사합니다.

0

vnfthr

답글 정말 감사합니다 .

. 클라이언트는 인터페이스만 알고, 해당 인터페이스의 메서드를 호출하면, 구현체에 대해 알지 못하더라도 DI 등의 기술로 인해 실제 구현체가 동작하게 됩니다

--> 이 부분이 잘 이해가 가지 않습니다 하이버네이트같은 구현체를 따로 의존성에 추가하지 않았는데 DI가 어떻게 일어나며 실제 구현체가 어떻게 동작하게 되는걸까요? jpa가 기본으로 구현체를 따로 들고있다는 말씀이실까요?

0

y2gcoder

hibernate 가 꼭 있어야 합니다.
현재 보고 계신 예제에서도 hibernate 의존성을 주입해서 사용하고 있습니다.

혹시 Spring Data JPA 라이브러리리를 보고 그렇게 생각하셨다면 Spring Data JPA 라이브러리도 내부에 hibernate 구현체를 사용하고 있습니다 :)

image
Spring Data JPA 라이브러리와 JPA, Hibernate 는 다음 링크(클릭)을 참고해보시겠습니까?

벌크연산에서 member.getAge 호출 시 영속성 컨텍스트에서 데이터를 가져오는건가요?

0

21

2

inheritance startegy 선택시 고려사항

0

21

1

Entity 동등성 비교

0

18

1

실무 조언 관련 질문입니다.

0

44

1

H2데이터베이스 파일 생성

0

56

2

서브쿼리 강의에서 ALL 예시 관련 질문드립니다.

0

52

2

수정또는 삭제시 영속성 엔티티에 값이 무조건 있어야 하나요?

0

51

1

JPQL 메소드와 락

0

55

1

Delivery @OneToOne

0

60

1

17강 4~5분대 테이블 값 조회가 안됩니다.

0

92

2

UnsupportedOperationException 발생

0

85

3

H2 Database 연결이 안됩니다.

0

92

2

연관관계 매핑 질문드립니다.

0

85

2

h2데이터베이스 실행오류

0

107

2

persistence.xml

0

106

2

양방향 연관관계에서 연관관계의 주인(mappedBy)을 왜 꼭 정해야 하나요?

0

80

1

영속성 컨텍스트

0

65

1

JPA 프록시

0

94

1

Native Query와 MyBatis

0

67

1

영속성 컨텍스트는 어떤 메모리에 저장되는건가요?

0

85

1

임베디드 타입 예시 코드 관련 질문

0

114

3

명시적 조인에서 별칭을 주면 왜 객체에 접근할 수 있나요

0

94

3

인텔리제이 패키지 커서 단축키 질문

0

108

2

혹시 현재는 ID 데이터 타입이 String이면 안되나요?

0

143

1