[TypeORM / QueryBuilder] Relation with property path confirms in entity was not found트러블슈팅2023. 12. 8. 11:51
Table of Contents
728x90
728x90
최근 레거시 코드 중 DB 관련 로직들을 거의 대부분 쿼리빌더로 변경하는 작업을 완료하고, 검수중에 있다.
그 과정에서 발생한 에러들을 하나하나 정리하여 남기려고 한다.
에러 메세지
원인
관계 매핑이 정확하지 않아서 발생했다.
나의 경우는 아래 이유 때문에 발생했는데,
TypeORM의 쿼리빌더를 사용하는 과정에서, 커스텀 리파지토리를 생성하여, 해당 리파지토리에서 두 테이블을 조인해서 사용했는데,
처음 INNER JOIN을 시도한 테이블에서, enterprise라는 엔터티에 대한 정의를 내리지 않았기 때문에 발생했다.
해당 엔터티를 살펴보면,
export class EasyBookWhichEntEntity {
@PrimaryGeneratedColumn({ type: 'int', name: 'no' })
no: number;
@Column('varchar', { name: 'enterprise_code' })
enterpriseCode: string;
@Column('varchar', { name: 'product_no' })
productNo: string;
@Column('int', { name: 'easy_book_no' })
easyBookNo: number;
@ManyToOne(() => EasyBookEntity, (book) => book.ents)
@JoinColumn({ name: 'easy_book_no' })
book: EasyBookEntity;
}
EasyBookEntity에 대한 정의만 내려져있지, enterprise에 대한 정의가 내려져있지 않았다.
해결
이제 해당 엔터티에 조인 컬럼의 정의를 내려주자.
export class EasyBookWhichEntEntity {
@PrimaryGeneratedColumn({ type: 'int', name: 'no' })
no: number;
@Column('varchar', { name: 'enterprise_code' })
enterpriseCode: string;
@Column('varchar', { name: 'product_no' })
productNo: string;
@Column('int', { name: 'easy_book_no' })
easyBookNo: number;
@ManyToOne(() => EasyBookEntity, (book) => book.ents)
@JoinColumn({ name: 'easy_book_no' })
book: EasyBookEntity;
@OneToOne(() => WmEnterpriseEntity, (ent) => ent.eBook)
@JoinColumn({ name: 'enterprise_code' })
enterprise: WmEnterpriseEntity;
}
export class WmEnterpriseEntity {
@PrimaryGeneratedColumn({ type: 'bigint' })
no: number;
(...생략...)
@OneToOne(() => EasyBookWhichEntEntity, (eBook) => eBook.enterprise)
eBook: EasyBookWhichEntEntity;
}
정확히 관계 매핑을 해주고나면, 동작하는 모습을 볼 수 있다.
728x90
300x250
@mag1c :: 꾸준히 재밌게
2023.04 ~ 백엔드 개발자의 기록
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!