인프런 커뮤니티 질문&답변

jeidiiy님의 프로필 이미지

작성한 질문수

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

즉시 로딩과 지연 로딩

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

작성

·

188

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 라는 컬렉션이 출력됐습니다. 일대다인 경우에는 프록시 객체가 없는 건가요?

답변 1

1

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. wscrg님

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

감사합니다.

jeidiiy님의 프로필 이미지

작성한 질문수

질문하기