【问题标题】:TypeORM creates double tables - is it by design?TypeORM 创建双表 - 是设计使然吗?
【发布时间】:2020-04-03 11:32:57
【问题描述】:

我是 TypeORM 的新手。在 NestJS + TypeORM/postgres 应用程序中,我有这三个非常简单的实体

@Entity()
export class Book extends BaseEntity {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  title: string;

  @Column()
  year: string;
}


@Entity()
export class Author extends BaseEntity {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  firstName: string;

  @Column()
  lastName: string;
}

@Entity()
export class Genre extends BaseEntity {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  name: string;
}

如您所见,目前还没有任何关系,没有自定义表或列名,纯默认实体。

当我启动应用程序(使用 synchronize: true)并查看 pgAdmin 时,我可以看到 authorgenre 表与重复表一起创建,共享相同的列集:

author
author_entity
genre
genre_entity
book

这是设计使然吗? book 实体没有重复的原因是什么。如果这是意外行为,我应该在哪里调查?

【问题讨论】:

  • 这不是预期的行为,不。您是否曾经将您的作者和流派实体命名为“AuthorEntity”和“GenreEntity”?我可能是错的,但我的猜测是同步不会仅仅因为实体被重命名而删除旧表。
  • 是的,这就是线索。因此,当我删除 dist 文件夹时,事情就变得顺理成章了。随意添加您的评论作为答案,我会接受它。

标签: nestjs typeorm


【解决方案1】:

我的猜测是,您最初可能将 Author 和 Genre 实体命名为 AuthorEntityGenreEntity。我不认为synchronize 会自动删除实体被重命名的数据库表;它只会创建一个新表。

因此,一个简单的解决方案是删除数据库中的表并重新运行同步,这样您就不应该再拥有那些孤立的表。

【讨论】:

  • 和原来的评论一样——之前的状态仍然持续在过时的编译中,所以rm -rf dist解决了这个问题。感谢您的提示!
猜你喜欢
  • 2012-11-29
  • 1970-01-01
  • 2018-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-20
  • 1970-01-01
  • 2011-10-13
相关资源
最近更新 更多