Typeorm:@Unique装饰器和{唯一:true}列选项之间有什么区别?

时间:2020-09-08 11:57:25

标签: typeorm

在Typeorm中,您可以在列选项中设置唯一标志,或将实体的列设置为唯一。

什么时候使用什么,有什么区别?

@Unique(["firstName"])

https://typeorm.io/#/decorator-reference/unique

@Column({ unique: true })
firstName: string;

https://typeorm.io/#/decorator-reference/column

1 个答案:

答案 0 :(得分:3)

如文档中所述,@Unique 只能应用于整个实体,不能应用于单个列。为了可读性,我更喜欢简单的约束 @Column({ unique: true }),因为它正好位于受影响的变量名称之上。

@Unique 语法的另一个优点是多列约束能力。您可以将多个列定义为一个唯一约束:@Unique(["firstName", "secondName"])。这对于 @Column 装饰器是不可能的。

最后,您可以在使用 @Unique 装饰器时为特定约束设置名称。以下单列约束定义在功能上是相同的,除了 @Unique 设置了一个人类可读的名称(注意:@Unique 需要实体变量字段名称,而不是实际的数据库列名称):

@Unique('my_unique_constraint', ['firstName'])  // make firstName unique
export class PersonEntity {

   @Column({ unique: true })   // make firstName unique, too; decide which to chose
   firstName: string;
...