🤍 전 강의 25% 할인 중 🤍

2024년 상반기를 돌아보고 하반기에도 함께 성장해요!
인프런이 준비한 25% 할인 받으러 가기 >>

  • 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

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

21.07.14 12:06 작성 조회수 380

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가 아닌 컬럼과 조인할 경우 이러한 문제를 해결 할 수 있는 방법이 있는지 궁금합니다.

답변 1

답변을 작성해보세요.

0

안녕하세요. Mincheol Ji님

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

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

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

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

감사합니다.

채널톡 아이콘