NestJS QueryBuilder 트러블 슈팅

바그다드·2023년 12월 26일
0
  • QueryBuilder활용 - ProjectMember/Project/Role테이블 조인
    @Entity()
    export class ProjectMember{ 
        @PrimaryColumn()
        userSeq: number;
    
        @PrimaryColumn()
        projectSeq: number;
    
        @ManyToOne(() => User, (user) => user.userSeq)
        @JoinColumn({name: 'userSeq'})
        user:User;
    
        @ManyToOne(() => Project, (project) => project.projectSeq, {eager: true})
        @JoinColumn({ name: 'projectSeq'})
        project: Project;
    
        @ManyToOne(() => Role, (role) => role.roleId, {eager: true})
        @JoinColumn({name: 'roleId'})
        role:Role
    }
    const query = this.projectMemberEntity
                .createQueryBuilder('projectMember')
                .innerJoinAndSelect('projectMember.project','project')
                .where('projectMember.userSeq = :userSeq', {userSeq})
                .getMany();
    
            return query;
    • 당시 생각
      Entity에 @ManyToOne으로 관계를 맺어주었고, 실제 DB에도 관계가 형성되어 eager를 사용하지 않는 user를 제외한 project와 role이 조회될 것이라고 생각함
    • 원인
      QueryBuilder를 사용하면 커스터마이징이나 최적화가 가능하기 때문에 개발자가 명시하지 않은 테이블에 대해서는 조회를 하지 않음
      내가 작성한 쿼리에서는 projectmember테이블과 project테이블만 innerJoinAndSelect()를 이용하여 조회하고 있으므로 role은 따로 조회를 하지 않음
profile
꾸준히 하자!

0개의 댓글