inflearn logo
강의

Course

Instructor

Real-world! Spring Boot and JPA Utilization 2 - API Development and Performance Optimization

pk가 아닌 컬럼과 join으로 인한 문제

533

Mincheol Ji

2 asked

0

CREATE TABLE team

(

    id integer NOT NULL,

    name character varying(100)  NOT NULL,

    team_id integer,

    CONSTRAINT team_pkey PRIMARY KEY (id)

);

CREATE TABLE member

(

    id integer NOT NULL,

    team_id integer NOT NULL,

    name character varying(100) NOT NULL,

    CONSTRAINT member_pkey PRIMARY KEY (id),

    CONSTRAINT member_team_id FOREIGN KEY (team_id)

        REFERENCES team (id) MATCH SIMPLE

        ON UPDATE NO ACTION

        ON DELETE NO ACTION

        NOT VALID

);

------------------------------------------------------------------------------------------------------------------

@Data

@Entity

@Builder

@AllArgsConstructor

@NoArgsConstructor

@Table(

name = "team"

)

public class Team implements Serializable{

    @Id

    @GeneratedValue(generator = "incrementSeq")

@GenericGenerator(name="incrementSeq", strategy = "org.hibernate.id.IncrementGenerator")

    @Column(name = "id", nullable = false)

    private int id;

    @Column(name="name", length = 20) 

private String name;

    @Column(name="team_id") 

private int teamId;

    @OneToMany(

    mappedBy = "team",

    cascade = CascadeType.ALL,

    fetch = FetchType.LAZY

)

    private List<Member> members = new ArrayList<Member>();

}

------------------------------------------------------------------------------------------------------------------

@Data

@Entity

@Builder

@AllArgsConstructor

@NoArgsConstructor

@Table(

name = "member"

)

public class Member{

    @Id

    @GeneratedValue(generator = "incrementSeq")

@GenericGenerator(name="incrementSeq", strategy = "org.hibernate.id.IncrementGenerator")

    @Column(name = "id", nullable = false)

    private int id;

    

    @ManyToOne(fetch = FetchType.LAZY, optional = false, cascade = CascadeType.ALL)

    @JoinColumn(name = "team_id", referencedColumnName = "team_id")

    private Team team;

    

    @Column(name="name", length = 20) 

private String name;

}

테이블 구조와 Class는 구성입니다.

테스트 중 oneToMany에 문제점이 있어 이를 해결할수 있는 방법을 알고싶어 문의 드립니다.

QueryResults<Team> result =

queryFactory

.selectFrom(team)

.leftJoin(team.members, member)

.fetchJoin()

.fetchResults();

result.getResults().get(0);

result.getResults().get(0).getMembers();

fetchJoin시 쿼리 확인결과

    select

        team0_.id as id1_22_0_,

        members1_.id as id1_2_1_,

        team0_.name as name2_22_0_,

        team0_.team_id as team_id3_22_0_,

        members1_.name as name2_2_1_,

        members1_.team_id as team_id3_2_1_,

        members1_.team_id as team_id3_2_0__,

        members1_.id as id1_2_0__ 

    from

        scop.team team0_ 

    left outer join

        scop.member members1_ 

            on team0_.team_id=members1_.team_id;

전체 left outer join 쿼리가 나가고

    select

        team0_.id as id1_22_0_,

        team0_.name as name2_22_0_,

        team0_.team_id as team_id3_22_0_ 

    from

        scop.team team0_ 

    where

        team0_.team_id=?

team 갯수만큼 쿼리가 나가는 문제점을 확인하였습니다.

team_id가 pk가 아닌 컬럼과 fk로 oneToMany일때 이러한 현상이 발상하는데

pk가 아닌 컬럼과 조인할 경우 이러한 문제를 해결 할 수 있는 방법이 있는지 궁금합니다.

spring-boot java spring JPA

Answer 1

0

yh

안녕하세요. Mincheol Ji님

전체 프로젝트를 압축해서 구글 드라이브로 공유해서 링크를 남겨주세요.

추가로 다음 내용도 코멘트 부탁드립니다.

1. 실행 방법을 알려주세요.

2. 어떻게 문제를 확인할 수 있는지 자세한 설명을 남겨주세요.

감사합니다.

강의 관련 외 질문입니다.

0

67

2

SpringBoot4 + Hibernate7 모듈 등록 방법 공유

0

92

1

BeanCreationException

0

90

3

Update 후 UpdateMemberResponse 매핑할 때

0

50

1

트랜잭션을 사용 안 할 때 커넥션은 언제 가져오나요?

0

101

2

페이징 + 검색조건 관련해서 질문드립니다.

0

70

1

Query Dsl Q파일 질문입니다.

0

84

1

루트 쿼리라는것은

0

59

1

메서드를 분리하는 기준

0

63

1

findAllWithMemberDelivery 메서드 질문드립니다.

0

110

3

연관관계 매핑을 안 쓸 경우, 사용해야 하는 전략

0

86

2

fetch join과 영속화와 OSIV의 관계

0

86

2

Distinct 사용 전 결과에 대한 의문

0

114

2

레포지토리 계층에서의 트랜잭션에 대한 의문

0

59

1

영속성 컨텍스트 생명주기의 신기한 부분이 있습니다.

0

78

2

dto 필드 속 엔티티 여부

0

60

1

뷰템플릿 사용 시

0

77

2

Result 클래스 관련 질문

0

56

1

@PostConstruct 프록시 관련 질문드립니다

0

86

1

DTO 대신 Form 사용은 안되나요?

0

137

1

OSIV ON 상태일 때

0

96

1

fetch join VS fetch join 페이징 궁금증

0

183

2

양방향 연관관계 알아보는 법?

0

106

1

16강 17강 간단 정리 이게 맞을까요 ?

0

165

2