inflearn logo
강의

Course

Instructor

Java ORM Standard JPA Programming - Basics

:단방향 연관관계 질문있습니다.

254

zzzzz

192 asked

0

강의 :단방향 연관관계

20분 55초에서 쿼리가 안나온다는게

create table Team (

TEAM_ID bigint not null,

TEAM_NAME varchar(255),

primary key (TEAM_ID)

)

이게 안나오느다는건가요?

근데 persist로 db에 저장되서 안나온다고 하셨는데 12분에도 persist가 있는데도 쿼리가 나오는데요. 혹시 find 앞에 persist는 예외인건가요?

try {

Team team =new Team();

team.setName("TeamA");

em.persist(team);//영속 상태가 되면 pk값이 세팅 되고 영속 상태가 됨.

Member member = new Member();

member.setUsername("member1");

// member.setTeamId(team.getId());//연관관계 매핑 배우기 전 팀의 외래키를 만들어서 멤버에 조인함.

em.persist(member);

tx.commit();

}catch (Exception e){

tx.rollback();

}finally {

em.close();//엔티티 매니저가 내부적으로 데이터베이스를 물고 동작을 함.

}

emf.close();

}

단방향 연관관계 22분에서

em.flush();

em.clear();

을 추가하면 영속성 컨테스트를 db로 보내버리고 동기화 상태에서 1차캐시가 빈상태로 조회가능하다는것은 알겠는데요.

그래서 다른점이 혹시 아래 select문인가요?

Hibernate:

select

member0_.MEMBER_ID as MEMBER_I1_0_0_,

member0_.TEAM_ID as TEAM_ID3_0_0_,

member0_.USERNAME as USERNAME2_0_0_,

team1_.TEAM_ID as TEAM_ID1_1_1_,

team1_.TEAM_NAME as TEAM_NAM2_1_1_

from

Member member0_

left outer join

Team team1_

on member0_.TEAM_ID=team1_.TEAM_ID

where

member0_.MEMBER_ID=?

java jpa

Answer 3

0

David

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

  1. 멤버를 조회하는 쿼리가 나오지 않습니다. DB를 조회하지 않고 영속성 컨텍스트에서 엔터티에 대한 정보를 가져오기 때문입니다. find 앞의 persist가 예외처리 되는 게 아니라 어떤 엔터티를 영속성 컨텍스트에 저장되어 있는지가 핵심입니다. 예를 들어, 영속성 컨텍스트에는 A를 저장했지만, B를 조회하는 로직이 수행된다면 DB에서 B를 조회하는 쿼리가 발생하게 됩니다.

  2. 그래서 다른점이 혹시 아래 select문인가요?

    이게 무슨 말씀인지 조금 더 상세히 풀어서 설명해 주실 수 있으실까요?

감사합니다.

0

baek940dog

안녕하세요.

말씀하신 강의의 20분 55초에서 발생하지 않는 쿼리는 아래와 같은 멤버를 조회하는 쿼리입니다.

select
member0_.MEMBER_ID as MEMBER_I1_0_0_,
member0_.TEAM_ID as TEAM_ID3_0_0_,
member0_.USERNAME as USERNAME2_0_0_,
team1_.TEAM_ID as TEAM_ID1_1_1_,
team1_.TEAM_NAME as TEAM_NAM2_1_1_
from Member member0_
left outer join Team team1_ on member0_.TEAM_ID=team1_.TEAM_ID
where member0_.MEMBER_ID=?

 

감사합니다.

0

communityai8509

안녕하세요, 인프런 AI 인턴입니다.

단방향 연관관계에 대해 질문이 있으신 건가요?

강의 내용 중 “20분 55초에서 쿼리가 안 나온다”는 부분은 영속성 컨텍스트에 객체가 영속 상태가 되어서 발생하는 현상을 설명하는 부분입니다. 여기서 언급된 ‘쿼리가 안 나오는’ 것은 객체가 처음 영속성 컨텍스트에 저장될 때 발생하는 INSERT 문이 바로 발생하지 않고, 커밋 시점에 일괄적으로 처리된다는 의미입니다.

em.persist()를 한 후에 쿼리가 바로 발생하지 않는 이유, 그리고 em.flush()em.clear()를 추가할 때 데이터베이스와 영속성 컨텍스트의 동기화가 어떻게 이루어지는지에 대한 자세한 설명이 필요하신 것 같네요.

직접적인 답변 대신, 관련된 강의 내용이나 FAQ에서 더 깊이 있는 설명을 찾으실 수 있습니다. 해당 강의의 다른 질문들을 참고하시면 도움이 될 것입니다.

강의와 관련된 자세한 질문이나 혼동되는 부분에 대해 궁금한 점이 있으시다면, 아래 링크를 통해 질문을 남겨주세요.

강의명: 자바 ORM 표준 JPA 프로그래밍 - 기본편
질문하러 가기: 양방향 연관관계와 연관관계의 주인 2 -주의점, 정리

감사합니다.

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

0

38

1

H2데이터베이스 파일 생성

0

47

2

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

0

49

2

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

0

46

1

JPQL 메소드와 락

0

48

1

Delivery @OneToOne

0

55

1

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

0

85

2

UnsupportedOperationException 발생

0

80

3

H2 Database 연결이 안됩니다.

0

87

2

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

0

78

2

h2데이터베이스 실행오류

0

103

2

persistence.xml

0

101

2

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

0

75

1

영속성 컨텍스트

0

61

1

JPA 프록시

0

87

1

Native Query와 MyBatis

0

62

1

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

0

81

1

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

0

110

3

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

0

89

3

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

0

103

2

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

0

134

1

양방향 연관관계 시 연관관계 주인을 설정하는 이유

0

67

1

임베디드 타입과 MappedSuperClass의 차이점이 궁금합니다.

0

95

1

데이터베이스가 초기화되는 것 같아요

1

172

2