inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

즉시 로딩과 지연 로딩

일대다 지연로딩에 관한 질문입니다.

249

jeidiiy

작성한 질문수 13

0

Team -> Member 일대다 단방향 매핑을 하고 지연 로딩을 테스트해봤습니다. 코드는 다음과 같습니다.

@Entity
public class Member {

    @Id
    @GeneratedValue
    @Column(name = "MEMBER_ID")
    private Long id;

    private String username;

    private int age;

    // Getter and Setter...
}
@Entity
public class Team {

    @Id
    @GeneratedValue
    @Column(name = "TEAM_ID")
    private Long id;

    private String name;

    @OneToMany
    @JoinColumn(name = "TEAM_ID")
    private List<Member> members = new ArrayList<>();

    // Getter and Setter...
}
// ...
try {

    Team team = new Team();
    team.setName("teamA");

    Member member = new Member();
    member.setUsername("userA");
    member.setAge(20);

    team.getMembers().add(member);

    em.persist(member);
    em.persist(team);

    em.flush();
    em.clear();

    List<Team> teamList = em.createQuery("select t from Team t", Team.class).getResultList();
    System.out.println("teamList = " + teamList.getClass().getName());

    Team findTeam = teamList.get(0);
    System.out.println("findTeam = " + findTeam.getClass().getName());

    List<Member> memberList = findTeam.getMembers();
    System.out.println("memberList = " + memberList.getClass().getName());

    Member findMember = memberList.get(0);
    System.out.println("findMember = " + findMember.getClass().getName());

    String name = findMember.getUsername();
    System.out.println("findMember's name = " + name);

    tx.commit();
} catch (Exception e) {
        // ...

결과는 다음과 같습니다.

teamList = java.util.ArrayList

findTeam = jpql.Team

memberList = org.hibernate.collection.internal.PersistenceBag

findMember = jpql.Member

findMember's name = userA

저는 Team 객체는 실제 DB에서 가져온 엔티티 객체일 것이고 Member는 프록시 객체일 것이라 생각했습니다. 그런데 실제 결과는 둘 다 실제 엔티티 객체이고 Members는 org.hibernate.collection.internal.PersistentBag 라는 컬렉션이 출력됐습니다. 일대다인 경우에는 프록시 객체가 없는 건가요?

java JPA

답변 1

1

김영한

안녕하세요. wscrg님

강의를 조금 더 들어보시면 이해가 되실거에요^^

감사합니다.

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

0

22

2

inheritance startegy 선택시 고려사항

0

22

1

Entity 동등성 비교

0

18

1

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

0

46

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

93

2

UnsupportedOperationException 발생

0

86

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

68

1

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

0

85

1

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

0

114

3

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

0

94

3

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

0

108

2

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

0

143

1