并且仍然设法在另一个实体中执行@OneToMany。
export class ProductsOfOrder {
@ManyToOne(() => Order, order => order.products)
order: Order
@ManyToOne(() => Product)
product: Product
@Column({type: 'integer'})
amount: number
}
在使用顺序的外键的情况下
@Entity()
export class Order {
@PrimaryGeneratedColumn('uuid')
id: string
@ManyToOne(() => User)
user: User
@OneToMany(() => ProductsOfOrder, productsOfOrder => productsOfOrder.order, {cascade: true})
products: ProductsOfOrder[]
}
2条答案
按热度按时间nqwrtyyt1#
Ciao,不,你不能,因为它要求实体有一个主列,因为大多数ORM操作严重依赖于实体主ID。
llew8vvj2#
当然,你可以在TypeORM中创建一个没有主键的表。
这里有一个很好的肮脏的小黑客:
1.向模型中添加一个伪主列,并将insert、select和update选项设置为false。
1.生成一个迁移文件,然后从生成的SQL中删除主列部分
1.将synchronize选项设置为false
1.运行迁移
备注
在应用黑客之前,请参阅以下清单。如果您对其中任何一个选择“否”,请创建一个主键。
1.您将只在组中查询,即通常与where条件一起使用另一个索引/FK列
1.单个实体没有意义,你永远不会调用一个方法(例如保存)
1.主键对于单个记录占用相当大的空间(例如,对于简单指标,UUID主键)。
1.实体模式不经常改变;否则,
synchronize: false
选项可能会导致大量的恐慌。对于您的情况,在订单表中创建主键是非常有意义的。