【问题标题】:Typeorm synchronize:true emptying manyToMany relationship table on entity changeTypeorm synchronize:true在实体更改时清空manyToMany关系表
【发布时间】:2021-06-20 13:49:32
【问题描述】:

我是 typeorm 的新手,但我发现 synchronize: true 功能存在一个非常奇怪的问题,该功能设置在我的 ormconfig.js 中。当我修改具有多对多关系的实体时,在进行实体更改之前连接表中的任何数据都会消失。

这是我的Project 实体

@ObjectType()
@Entity("project")
export class Project extends BaseEntity {
  @Field(() => Int)
  @PrimaryColumn()
  id: number;

  @Field()
  @Column("text")
  name: string;

  @Field({ nullable: true })
  @Column("text", { nullable: true })
  cluster?: string;

  //project_groups
  @ManyToMany((type) => Group, (group) => group.projects, { lazy: true })
  @Field((type) => [Group], { nullable: true })
  @JoinTable()
  groups?: Group[];
}

这是我的Group 实体

@ObjectType()
@Entity("group")
export class Group extends BaseEntity {
  @Field(() => String)
  @PrimaryColumn()
  id: string;

  @Field()
  @Column("text")
  name: string;

  @Field({ nullable: true })
  @Column("text")
  type: string;

  @Field({ nullable: true })
  @Column("text", { nullable: true })
  currency: string;

  @Field((type) => [Project])
  @ManyToMany((type) => Project, (project) => project.groups, { lazy: true })
  projects: Project[];

  //group_modifiers
  @ManyToMany((type) => Modifier, (modifier) => modifier.group, { lazy: true })
  @Field((type) => [Modifier])
  @JoinTable()
  modifiers: Modifier[];
}

如果我向 Group 或 Project 添加一个新字段,迁移会自动运行,并且会出现以下查询

query: CREATE TABLE "temporary_project" ("id" integer PRIMARY KEY NOT NULL, "name" text NOT NULL, "cluster" text, "asdfa" text)
query: INSERT INTO "temporary_project"("id", "name", "cluster") SELECT "id", "name", "cluster" FROM "project"
query: DROP TABLE "project"
query: ALTER TABLE "temporary_project" RENAME TO "project"

关系表不应该持久化数据吗?

【问题讨论】:

    标签: typescript sqlite graphql typeorm


    【解决方案1】:

    synchronize option 确实适用于开发,当您大量更改数据模型时,您应该在部署之前将其关闭。

    synchronize - 指示是否应在每次应用程序启动时自动创建数据库模式。请小心使用此选项,不要在生产中使用它 - 否则您可能会丢失生产数据。此选项在调试和开发期间很有用。作为替代方案,您可以使用 CLI 并运行 schema:sync 命令。

    【讨论】:

    • 另外我猜你有一些东西正在监视你的代码并在更改时重新启动服务器,然后当它启动时 TypeORM 正在为你更新数据模型并删除数据。
    • 开发和部署周期应包括生成migration,然后在数据库上运行以控制何时进行更改并保留数据。
    • 感谢您的回复。恕我直言,默认是删除数据绝对有点奇怪。
    猜你喜欢
    • 2020-01-01
    • 2022-01-12
    • 1970-01-01
    • 2021-12-20
    • 2018-09-10
    • 2021-10-27
    • 1970-01-01
    • 2021-10-17
    • 2021-12-27
    相关资源
    最近更新 更多