使用 TypeORM + Postgres 的一对一关系中列的值为空

Value of column in one to one relation using TypeORM + Postgres is null

我正在尝试在 itemitem_name 之间建立一个简单的一对一关系。实体如下所示:

@Entity('item')
export class ItemEntity {
  @PrimaryColumn('integer')
  id: number;

  @OneToOne(() => ItemNameEntity)
  @JoinColumn()
  name: ItemNameEntity;

  // ... other props
}

item-name.entity

@Entity('item_name')
export class ItemNameEntity {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  en: string;

  @Column()
  fr: string;

  // ... other properties
}

我使用以下有效负载插入 item

{
      id: 26,
      name: { en: 'English name', fr: 'French name' },
}

它按预期存储项目,并添加了一个 nameId 列。问题是它没有向 item_name 中插入任何内容,因此 nameId 列是 null.

我在这里错过了什么?

来自 .

您必须在 ItemEntity 中的 name 关系上设置 cascade: true:

@Entity('item')
export class ItemEntity {
  @PrimaryColumn('integer')
  id: number;

  @OneToOne(() => ItemNameEntity, { cascade: true })
  @JoinColumn()
  name: ItemNameEntity;

  // ... other props
}

ItemEntity 上设置 cascade: true 告诉 TypeORM 如果一个新的 itemName item 上的“链接”item 已保存,新的 itemName也应该保存到数据库中。

示例:

const manager = getManager();
const item: ItemEntity = manager.create(ItemEntity, {
  id: 26,
  name: manager.create(ItemNameEntity, {
    en: 'English name',
    fr: 'French name'
  }),
});
await manager.save(ItemEntity, item);