当前位置: 首页 > 知识库问答 >
问题:

在传入未定义的TypeORM MongoDB ObjectIdColns时禁用ID的自动生成

司马飞
2023-03-14

我将NestJs与TypeORM和MongoDB一起使用。我有一个项目实体,它可能有一个后续项目。我目前的实体设计

@Entity()
export class Project extends BaseEntity {
  @ObjectIdColumn()
  public id: ObjectID;

  @ObjectIdColumn({ nullable: true, generated: false }) // set value manually
  @OneToOne(() => Project, project => project.id) // key has to exist if not null?
  public successorId?: ObjectID;
}

当我想保留数据类型时,successorId似乎必须是一个ObjectIdColumn。但是我想禁用自动生成,因为我想手动分配后续项目。因此,在我的存储库中,我通过

@EntityRepository(Project)
export class ProjectsRepository extends Repository<Project> {
    public createProject(successorId?: ObjectID): Promise<Project> {
        const project: Project = new Project();
        project.successorId = successorId;

        return project.save();
    }
}

问题是,当我将undefined分配给successorId时,MongoDB将id的相同值分配给successorId。因此json响应将是

{
  "id": "5e4f98671ad7ed2914fa596e",
  "successorId": "5e4f98671ad7ed2914fa596e"
}

我如何纠正这种行为?我不确定是否需要OneToOne关系,但我想提供一个验证,以便只能将现有ID分配为后续ID,我希望在传入不存在的随机ID时出现错误。

共有1个答案

白永昌
2023-03-14

问题就出在这里

  @OneToOne(() => Project, project => project.id)

我认为您误解了OneToOne的选项。您正在向它提供相关实体的PK列(您的第二个参数),而它用于定义可以引用关系另一侧的属性。试着完全去掉第二个选项,留下它

  @OneToOne(() => Project)

让我们知道!

 类似资料:
  • 我正在做一个基于GUI(swing)的Java小项目,我想禁用一些按钮。我用了我有: 但我只想把按钮的文本变成灰色,并使按钮本身的颜色和外观保持一致。我该怎么做?

  • 问题内容: 有人知道如何从1开始生成,以便下一个对象具有2,依此类推吗? 我尝试了以下方法,但不起作用: 问题答案: 您需要一个 静态的 类成员来跟踪上次使用的索引。确保还实现一个复制构造函数: 更新: 正如@JordanWhite建议的那样,您可能希望使static计数器成为 atomic ,这意味着可以安全地同时使用(即一次在多个线程中使用)。为此,将类型更改为: 增量读取和复位操作变为:

  • 问题内容: 我想向用户显示一些文本。我要发送的字符串变量包含多个换行符,并且我不想显示。所以我做了: bar.html: 但是启用了自动转义,我看到的是。同样,我的方法也不安全,我希望除文本外的每个标记都被转义。我看了flask.Markup模块,但是它们也不起作用。 正确的方法是什么? 问题答案: 您可以采用两种合理的方法。 解决方案1 当您将不安全的输入和HTML组合到一个变量中时,实际上是一

  • 问题内容: 我在Employee类中有以下定义 现在,我想使用现有员工ID导入现有员工。即使在保存之前设置了员工ID,也会忽略分配的ID,并存储自动递增的ID。我们如何覆盖呢? 问题答案: 我编写了自己的生成器来解决此问题。 并像这样使用它:(替换包名)

  • 数据访问对象: 有没有可能在上述方法本身中完成插入后返回用户的id,而不需要编写单独的select查询?

  • 当我在NetBeans 8.2中输入时,无论是HTML段落还是类似于输入字段的内容,这个恼人的自动建议功能都会不断出现。当我试图按enter键开始一个新行时,这真的很烦人,因为当我按enter键时,它会插入大量代码,因为“按钮”会自动高亮显示。 我在下面附上了问题的截图。。。 如何禁用此自动更正功能。我不想为PHP禁用autoorrect,也不想在实际设置HTML标记时禁用autoorrect(所