TypeORM no analiza Enum como el tipo de PostgreSQL.
Entidad:
@Entity()
export class MyEntity {
@Column({
type: 'enum',
enum: MyEnum,
default: MyEnum.DEFAULT,
})
type: MyEnum;
}
Enum:
export enum MyEnum {
DEFAULT = 1,
NOT_DEFAULT = 2
}
Migración creada por TypeORM:
await queryRunner.query(
`CREATE TYPE "my_enum_type_enum" AS ENUM('1', '2#39;)`,
);
await queryRunner.query(
`ALTER TABLE "my_table" ADD "type" "my_enum_type_enum" NOT NULL DEFAULT '1'`,
);
Crear la entidad en el código funciona bien, como se muestra en el siguiente ejemplo:
my_entity.type = MyEnum.DEFAULT; // "1" y "DEFAULT" no funcionan, pero 1 (int) funciona
Pero cuando intento guardarla a través del Repositorio
valor de entrada no válido para el enum my_enaum_type_enum: "DEFAULT"
¿Qué me falta aquí?
davy.ai
El problema aquí es que el valor pasado al enum en la Entidad no coincide con la representación de cadena del enum definido en el script de migración.
En la Entidad, el valor del enum está establecido en MyEnum.DEFAULT, que es equivalente a 1 según se indica en la definición del enum. Sin embargo, en el script de migración, los valores del enum están definidos como ‘1’ y ‘2’, que son representaciones de cadena de los valores enteros.
Para resolver este problema, los valores del enum en el script de migración deberían ser definidos como enteros en vez de cadenas:
Una vez hecha esta modificación, la representación de cadena del valor del enum establecido en la Entidad coincidirá con los valores definidos en el script de migración, y el Repositorio podrá guardar la entidad sin errores.