typeOrm уникальная строка - PullRequest
0 голосов
/ 30 октября 2019

Я пытаюсь создать сущность, использующую typeOrm на моем NestJS, и она не работает, как я ожидал.

У меня есть следующая сущность

@Entity('TableOne')
export class TableOneModel {
  @PrimaryGeneratedColumn()
  id: number

  @PrimaryColumn()
  tableTwoID: number

  @PrimaryColumn()
  tableThreeID: number

  @CreateDateColumn()
  createdAt?: Date
}

Этот код генерирует миграциюкоторая генерирует таблицу, как в примере ниже

+--------------+-------------+------+-----+----------------------+-------+
| 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) |       |
+--------------+-------------+------+-----+----------------------+-------+

Это нормально, проблема в том, что я хочу, чтобы таблица позволяла только одну строку с tableTwoID и tableThreeID, что я должен использовать в сущностичтобы сгенерировать таблицу так, как я ожидал?

Предполагается, что строки будут запрещены, как в примере ниже

+----+------------+--------------+----------------------------+
| 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
+----+------------+--------------+----------------------------+

Ответы [ 2 ]

3 голосов
/ 31 октября 2019

Попробуйте пометить столбец как уникальный

@ Unique () ColumnName

1 голос
/ 30 октября 2019

Это ожидаемое поведение от TypeORM. Согласно документации, если у вас есть несколько @PrimaryColumn() декораторов, вы создаете составной ключ. Комбинация составных ключевых столбцов должна быть уникальной (у вас выше '1' + '1' + '1' = '111' против '2' + '1' + '1' = '211'). Если вы хотите сделать каждый столбец уникальным, а не составным первичным ключом, вы должны сделать что-то вроде @PrimaryColumn({ unique: true })

...