如何使用 typeorm 实体在 mysql 中使用现有表?

Posted

技术标签:

【中文标题】如何使用 typeorm 实体在 mysql 中使用现有表?【英文标题】:How I can use exist table in mysql using typeorm entity? 【发布时间】:2020-03-21 18:15:42 【问题描述】:

使用 typeorm,我连接到 mysql 数据库。数据库中已经存在几个表。我尝试使用实体模块来描述表,但我的定义覆盖了现有表。如何使用实体从现有表中完全继承?

import "reflect-metadata";
import  Entity, PrimaryGeneratedColumn, Column, PrimaryColumn, OneToMany  from "typeorm";

@Entity("devices")
export class Devices 
    @PrimaryGeneratedColumn()
    ID: number;

    @Column( type: "varchar", length: 255 )
    Name: string;

    @Column( type: "int", nullable: false )
    DevID: number;

    @Column( type: "int", nullable: false )
    Longtitude: number;

    @Column( type: "int", nullable: false )
    Latitude: number;

    @PrimaryColumn( type: "varchar", length: 255 )
    URL_VWS: string;

【问题讨论】:

你的表是如何在 Mysql 中定义的,你应该提供它的模式,因为没有它就不可能回答你的问题 您还应该提供带有迁移和同步信息的ormconfig.json 文件。如果您使用sync 选项,您将无法安全地处理它。 【参考方案1】:

您可以使用@Entity 将同步属性设置为 false,如下所示。

@Entity(name:"devices", synchronize: false)

【讨论】:

这个答案对我有用。关于同步选项,“从模式更新中跳过标记为 false 的实体”。在这里找到更多信息:typeorm.io/#/decorator-reference/entity【参考方案2】:

在 ormconfig.json 中

改变


  "type": "mysql",
  "host": "localhost",
  "port": 3306,
  "database": "demo",
  "username": "root",
  "entities": ["src/**/**.entity.ts,.js"],
  "synchronize": true



  "type": "mysql",
  "host": "localhost",
  "port": 3306,
  "database": "demo",
  "username": "root",
  "entities": ["src/**/**.entity.ts,.js"],
  "synchronize": false


【讨论】:

以上是关于如何使用 typeorm 实体在 mysql 中使用现有表?的主要内容,如果未能解决你的问题,请参考以下文章

使用带有 TypeOrm 的 NestJS 连接 MySQL 数据库时出现问题

如何在带有typeorm的nestjs项目中使用外部实体?

TypeORM 无关联关系的mysql多表连接查询

TypeORM/MySQL:无法删除或更新父行:外键约束失败

如何在typeorm中查找id的数组属性包含某个id的实体

Typeorm - 基于实体的迁移