프로그래밍/NestJS
TypeORM에서의 명시적인 제약조건 이름 선언
카카수(kakasoo)
2022. 9. 12. 16:33
반응형
issue number #8524에서 JoinColumn에서의 제약 조건 이름을 추가하는 법이 추가되었습니다.
이 내용은, 기존의 방식처럼 Entity 위에 @index() 데코레이터를 통해 제약조건을 거는 것보다 명시적입니다.
인덱스 데코레이터의 경우에는 하나의 데코레이터를 이용해 Primary와 복합키, 외래키 등을 모두 표현했습니다.
따라서 그 의미가 무엇을 뜻하는지는 인덱스 데코레이터와 엔티티 칼럼과의 관계를 보고 이해해야 했습니다.
issue number #8900에서는 위의 변화와 더불어 Column 데코레이터에서도 제약조건 명시를 허용했습니다.
새로이 명시된 방법은 아래와 같습니다.
@Entity()
export class Post {
@ManyToOne((type) => Category)
@JoinColumn({
name: "cat_id",
referencedColumnName: "name",
foreignKeyConstraintName: "fk_cat_id"
})
category: Category
}
@Entity()
export class Post {
@ManyToMany((type) => Category)
@JoinTable({
name: "question_categories",
joinColumn: {
name: "question",
referencedColumnName: "id",
foreignKeyConstraintName: "fk_question_categories_questionId"
},
inverseJoinColumn: {
name: "category",
referencedColumnName: "id",
foreignKeyConstraintName: "fk_question_categories_categoryId"
},
})
categories: Category[]
}
JoinColumn과 JoinTable에서는 위처럼 명시할 수 있게 되었습니다.
이렇게 명시함으로써 엔티티 간의 관계가 어떤 제약조건으로 연결되어 있는지를 한 눈에 확인할 수 있게 됐습니다.
엔티티 간의 관계가 아니라, 단일 엔티티 내에서의 제약 조건은 다시 아래와 같이 표현 가능해졌습니다.
@Entity()
export class User {
@PrimaryColumn({ primaryKeyConstraintName: "pk_user_id" })
id: number
}
@Entity()
export class User {
@Column({ primary: true, primaryKeyConstraintName: "pk_user_id" })
id: number
}
@Entity()
export class User {
@PrimaryGeneratedColumn({ primaryKeyConstraintName: "pk_user_id" })
id: number
}
두 방식 모두, 명시적으로 선언 가능할 뿐만 아니라 커스텀한 제약 조건 이름을 넣을 수 있습니다.
이 내용들은 TypeORM 0.3.7 이상의 버전에서 사용 가능합니다.
반응형