inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

프로젝션(SELECT)

쿼리 순서

250

gusdn85554

작성한 질문수 47

0

안녕하십니까 복습을 하던 중에 궁금한 점이 생겨 질문드립니다!!

간결하게 작성하기 위해 코드 부분은 try 부분만 가져왔습니다. 영한님과 다른 점은 em.flush(), em.clear()가 없습니다.

1번 코드

```java

Member member = new Member();
member.setUsername("member1");
member.setAge(10);
em.persist(member);

em.createQuery("select t from Member m join m.team t", Team.class)
        .getResultList()
;

tx.commit();

```

1번 코드 쿼리 

2번 코드

```java

Member member = new Member();
member.setUsername("member1");
member.setAge(10);
em.persist(member);

em.createQuery("select o.address from Order o", Address.class)
        .getResultList()
;

tx.commit();

```

2번 코드 쿼리

 

1번의 결과는 강의에서 말씀하듯이 쿼리를 작성했기 때문에 flush, clear 호출 ->

member가 insert -> select 가 작동함을 알 수 있습니다.

 

2번의 결과는 createQuery가 먼저 실행 -> member insert 가 됩니다.

제가 처음 생각했을 때는 1차 캐시를 생각했습니다. 하지만 1차 캐시와는 연관이 없는게 현재 1차 캐시에는 member만 존재합니다. 그래서 관계가 없다고 생각했습니다.

둘째로, Order의 address를 조회하는데 member가 전혀 관련이 없어서 JPA 자체에서 쿼리를 날릴 필요가 없네 라는 생각을 하고, 먼저 select 조회를 한 뒤에, commit을 만나 member를 insert 하나? 라는 추론을 해보았습니다. 

하지만 강의에서 DB에 뭐가 있는지도 모를텐데 쿼리를 날리면 필요가 없기 때문에 flush, clear를 한다 라고 말씀하셔서 

2번의 결과가 왜 이렇게 나오는지 궁금합니다!

 

 

 

JPA java

답변 2

3

David

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

.

맥락 이해를 위해 작성하신 코드 전체를 올려주시면 좋을 것 같아요.

.

감사합니다.

1

김영한

안녕하세요. gusdn85554님 좋은 질문입니다.

하이버네이트는 내부에 최적화 기능이있습니다.

JPQL을 실행할 때 사실 모든 내용을 다 플러시 하는 것이 아니라, 해당 JPQL과 관련 있는 엔티티만 플러시합니다.

더 자세한 내용은 다음을 참고해주세요^^

https://www.inflearn.com/questions/188207

감사합니다.

0

gusdn85554

아.. 관련 있는 엔티티만 플러시하는군요!! 감사합니다 

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

0

15

2

inheritance startegy 선택시 고려사항

0

21

1

Entity 동등성 비교

0

18

1

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

0

44

1

H2데이터베이스 파일 생성

0

55

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

64

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