javascript - 为什么我没有实体的引用 ID?

标签 javascript node.js typescript orm typeorm

我在 TypeORM 中有两个简单的实体,具有一对一连接。如果我发出 POST 请求,我会获取表,但引用 ID 仍为 null。这是为什么?

主要用户实体:

@Entity({ name: "user" })
export class User extends BaseEntity {
  @PrimaryGeneratedColumn()
  id: number;

  @Column({ unique: true })
  username: string;

  @Column()
  password: string;

  @OneToOne(
    (type) => Personal,
    (personal) => personal.user,
    { cascade: true }
  )
  @JoinColumn()
  personalId: personal;
}

个人实体:

@Entity({ name: "personal" })
export class Personal {
  @PrimaryGeneratedColumn()
  id: number;

  @Column({ nullable: true })
  familyName: string;

  @Column({ nullable: true })
  additionalName: string;

  @OneToOne(
    (type) => User,
    (user) => user.personalId
  )
  user: User;
}

更新:

我尝试设置eager: true但没有任何改变。 我曾尝试设置 nullable: false 并删除了现有数据库,但当我尝试 POST 时却没有发生任何事情。

最佳答案

您在 OneToOne 装饰器中指定了 cascade: true,这意味着当您将用户与给定人员一起保存时,该人员也将被保存。 当您加载用户时,您需要指定需要连接人员的数据。否则,当您获得用户时,人员实体将被持久化,不会被加载。在您的情况下,这可以通过将 eager 设置为 true 来完成:

  @OneToOne(
    (type) => Personal,
    (personal) => personal.user,
    { cascade: true, eager: true }
  )
  @JoinColumn()
  personalId: personal;

如果您想使用查询构建器,这将起作用:

const queryBuilder = entityManager.createQueryBuilder(User, 'user');
queryBuilder.leftJoinAndSelect('user.person', 'person');
return queryBuilder.getMany();

关于javascript - 为什么我没有实体的引用 ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61387347/

相关文章:

javascript - html select list - 获取显示的文本值

javascript - PHP 和 Ajax 在回调和返回数组中使用 foreach 循环

node.js - 直线 API : Define a new ChannelId

将数组转换为 "2-tuples"数组的 JavaScript 函数

javascript - HERE Maps JS API v3 集群提供程序在添加许多数据点时挂起

javascript - if 语句中的变量重新分配不会引发错误

javascript - Express:在 Controller 中使用异步等待的问题

typescript - 具有构造签名而不是类型检查的接口(interface)

angular - Angular 2 中的 session 存储 - 可观察

javascript - 如何动态创建 TypeScript 表