pk가 아닌 컬럼과 join으로 인한 문제
535
2 asked
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. 어떻게 문제를 확인할 수 있는지 자세한 설명을 남겨주세요.
감사합니다.
강의 관련 외 질문입니다.
0
82
2
SpringBoot4 + Hibernate7 모듈 등록 방법 공유
1
101
1
BeanCreationException
0
96
3
Update 후 UpdateMemberResponse 매핑할 때
0
57
1
트랜잭션을 사용 안 할 때 커넥션은 언제 가져오나요?
0
103
2
페이징 + 검색조건 관련해서 질문드립니다.
0
74
1
Query Dsl Q파일 질문입니다.
0
86
1
루트 쿼리라는것은
0
62
1
메서드를 분리하는 기준
0
71
1
findAllWithMemberDelivery 메서드 질문드립니다.
0
116
3
연관관계 매핑을 안 쓸 경우, 사용해야 하는 전략
0
92
2
fetch join과 영속화와 OSIV의 관계
0
91
2
Distinct 사용 전 결과에 대한 의문
0
120
2
레포지토리 계층에서의 트랜잭션에 대한 의문
0
63
1
영속성 컨텍스트 생명주기의 신기한 부분이 있습니다.
0
79
2
dto 필드 속 엔티티 여부
0
63
1
뷰템플릿 사용 시
0
82
2
Result 클래스 관련 질문
0
57
1
@PostConstruct 프록시 관련 질문드립니다
0
88
1
DTO 대신 Form 사용은 안되나요?
0
140
1
OSIV ON 상태일 때
0
99
1
fetch join VS fetch join 페이징 궁금증
0
191
2
양방향 연관관계 알아보는 법?
0
110
1
16강 17강 간단 정리 이게 맞을까요 ?
0
168
2

