m_d*_*ney 5 javascript entity typeorm
我有一个用例需要在我的表中使用自定义字符串主键。(我不想使用 GraphQL 提供的默认“uuid”,而是想使用shortid 库来生成自定义唯一 id。)
我是 TypeORM 初学者,我在文档中没有找到任何关于设置自定义默认主键的信息。是否可以在 TypeORM PrimaryGeneratedColumn 中实现我想要的,还是必须通过其他方式来完成我想要的?
更新:我了解到我可以在保存实体之前使用@BeforeInsert 侦听器修改实体,但是 TypeORM 仍然不允许我覆盖 PrimaryGeneratedColumn('uuid') 并使用 shortId 字符串,因为 shortId 字符串不是有效的 uuid。
Tim*_*hel 10
所述@PrimaryGeneratedColumn('uuid')装饰映射列到uuid数据库是否支持它的数据库字段类型,这意味着该列的值必须是一个有效的UUID。
对于您的情况,我建议装饰:
typescript
@PrimaryColumn('varchar', { length: <max shortId length>, default: () => `'${shortid.generate()}'` })
小智 5
@Timshel 的答案在使用 SQLite 时不起作用,因为默认值必须是常量。它给出了以下错误:
UnhandledPromiseRejectionWarning: QueryFailedError: SQLITE_ERROR: default value of column [id] is not constant
Run Code Online (Sandbox Code Playgroud)
相反,您可以使用@BeforeInsert来实现所需的结果,如下所示:
@Field(() => ID)
@PrimaryColumn("varchar", {
length: 20
})
id: string;
@BeforeInsert()
setId() {
this.id = shortid.generate();
}
Run Code Online (Sandbox Code Playgroud)