[TypeOrm] FK를 복합키로 사용하기

초보개발자·2022년 2월 27일
0

typeorm

목록 보기
1/1

1. erd

2. 첫시도

  • typeorm api문서를 활용해 구현해 보았다
@Entity()
export class Instructors extends BaseEntity {
    @PrimaryGeneratedColumn({
        type: 'int',
    })
    id: number
	
    ...

    @OneToMany(() => Lectures, lecture => lecture.instructors)
    lectures: Lectures[]
}

@Entity()
export class Lectures extends BaseEntity {
    @PrimaryGeneratedColumn({
        type: 'int',
    })
    id: number

   	...
    
    @Column({
        type: 'timestamptz',
        nullable: true,
    })
    lectureModifyDate: Date

    @OneToMany(() => CourseDetails, courseDetail => courseDetail.idl)
    courseDetail: CourseDetails[]

    @ManyToOne(() => Instructors, instructor => instructor.lectures)
    instructors: Instructors
}

@Entity()
export class CourseDetails extends BaseEntity {
    @PrimaryColumn()
    @ManyToOne(() => Lectures, lecture => lecture)
    idl: Lectures

    @PrimaryColumn()
    @ManyToOne(() => Students, stduent => stduent)
    ids: Students

    @Column({
        type: 'timestamptz',
        nullable: false,
    })
    registDate: Date
}

@Entity()
export class Students extends BaseEntity {
    @PrimaryGeneratedColumn({
        type: 'int',
    })
    id: number

	...
    
    @OneToMany(() => CourseDetails, courseDetail => courseDetail.ids)
    courseDetail: CourseDetails[]
}

오류 메세지에 따라

tsconfig.json "emitDecoratorMetadata": true 추가


실패

"reflect-metadata" 추가


실패

3. CourseDetails 테이블 문제

  • CourseDetails entity를 주석처리 후 생성

    생성이 되는걸 보니 CourseDetails entity 문제
@Entity()
export class CourseDetails extends BaseEntity {
    @ManyToOne(() => Lectures, lecture => lecture.id, { primary: true })
    lecture: Lectures

    @ManyToOne(() => Students, stduent => stduent.id, { primary: true })
    student: Students

    @Column({
        type: 'timestamptz',
        nullable: false,
    })
    registDate: Date
}



문제 해결

@PrimaryColumn()와 { primary: true }의 동작 방식에 차이가 있었다.

profile
주니어 개발자입니다!

0개의 댓글