Written on
·
479
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가 아닌 컬럼과 조인할 경우 이러한 문제를 해결 할 수 있는 방법이 있는지 궁금합니다.
Answer 1
0
안녕하세요. Mincheol Ji님
전체 프로젝트를 압축해서 구글 드라이브로 공유해서 링크를 남겨주세요.
추가로 다음 내용도 코멘트 부탁드립니다.
1. 실행 방법을 알려주세요.
2. 어떻게 문제를 확인할 수 있는지 자세한 설명을 남겨주세요.
감사합니다.