Nestjs 类型唯一行

Nestjs 类型唯一行,nestjs,typeorm,Nestjs,Typeorm,我试图在我的NestJS上使用typeOrm创建一个实体,但它并没有像我预期的那样工作 我有以下实体 @实体“表一” 导出类TableOneModel{ @主生成列 身份证号码 @主柱 tableTwoID:编号 @主柱 表3ID:编号 @CreateDateColumn 创建日期?:日期 } 这段代码生成一个迁移,该迁移生成一个如下示例所示的表 +--------------+-------------+------+-----+----------------------+-------+

我试图在我的NestJS上使用typeOrm创建一个实体,但它并没有像我预期的那样工作

我有以下实体

@实体“表一” 导出类TableOneModel{ @主生成列 身份证号码 @主柱 tableTwoID:编号 @主柱 表3ID:编号 @CreateDateColumn 创建日期?:日期 } 这段代码生成一个迁移,该迁移生成一个如下示例所示的表

+--------------+-------------+------+-----+----------------------+-------+
| Field        | Type        | Null | Key | Default              | Extra |
+--------------+-------------+------+-----+----------------------+-------+
| id           | int(11)     | NO   |     | NULL                 |       |
| tableTwoID   | int(11)     | NO   |     | NULL                 |       |
| tableThreeID | int(11)     | NO   |     | NULL                 |       |
| createdAt    | datetime(6) | NO   |     | CURRENT_TIMESTAMP(6) |       |
+--------------+-------------+------+-----+----------------------+-------+
+----+------------+--------------+----------------------------+
| id | tableTwoID | tableThreeID | createdAt                  |
+----+------------+--------------+----------------------------+
|  1 |          1 |            1 | 2019-10-30 19:27:43.054844 |
|  2 |          1 |            1 | 2019-10-30 19:27:43.819174 |    <- should not allow the insert of this row
+----+------------+--------------+----------------------------+
好的,问题是,我希望表只允许一行具有tableTwoID和tableTwoID,我应该在实体中使用什么来生成我期望的表

预期不允许像下面的示例那样的行

+--------------+-------------+------+-----+----------------------+-------+
| Field        | Type        | Null | Key | Default              | Extra |
+--------------+-------------+------+-----+----------------------+-------+
| id           | int(11)     | NO   |     | NULL                 |       |
| tableTwoID   | int(11)     | NO   |     | NULL                 |       |
| tableThreeID | int(11)     | NO   |     | NULL                 |       |
| createdAt    | datetime(6) | NO   |     | CURRENT_TIMESTAMP(6) |       |
+--------------+-------------+------+-----+----------------------+-------+
+----+------------+--------------+----------------------------+
| id | tableTwoID | tableThreeID | createdAt                  |
+----+------------+--------------+----------------------------+
|  1 |          1 |            1 | 2019-10-30 19:27:43.054844 |
|  2 |          1 |            1 | 2019-10-30 19:27:43.819174 |    <- should not allow the insert of this row
+----+------------+--------------+----------------------------+

这是TypeORM当前预期的行为。根据文档,如果您有多个@PrimaryColumn装饰器,则创建一个复合键。组合键列的组合在上述“1”+“1”+“1”=“111”与“2”+“1”+“1”=“211”中必须是唯一的。如果您希望使每一列都是唯一的,同时又是一个复合主键,那么您应该能够执行类似@PrimaryColumn{unique:true}

的操作,这是TypeORM当前预期的行为。根据文档,如果您有多个@PrimaryColumn装饰器,则创建一个复合键。组合键列的组合在上述“1”+“1”+“1”=“111”与“2”+“1”+“1”=“211”中必须是唯一的。如果您希望使每个列都是唯一的,同时又是一个复合主键,那么您应该能够执行类似@PrimaryColumn{unique:true}

的操作,尝试将该列标记为唯一的

@独特的
ColumnName

尝试将列标记为唯一

@独特的
ColumnName

谢谢,这个技巧帮助解决了我的问题,我用过这样的@Unique'uniqueTableTwoIDTableThreeID',['tableTwoID','tableThreeID']注释实体类而不是列将生成复合键谢谢,这个技巧帮助解决了我的问题,我用过这样的@Unique'uniqueTableTwoIDTableThreeID',['tableTwoID','tableTwoID']将实体类注释为非列将生成复合主键我收到消息错误:当使用多个@PrimaryColumn decorator与TypeORM和sqlite3时,Sqlite不支持复合主键上的自动增量。我收到消息错误:当使用多个@PrimaryColumn时,Sqlite不支持复合主键上的自动增量n具有TypeORM和sqlite3的decorator。