在TypeORM中使用实体@Entity与字段@Column注解

2023-05-16

在TypeORM中使用实体@Entity与字段@Column注解

客观存在并相互区别的事物称为实体(Entity)。
实体是一个抽象名词,是指一个独立的事物个体,自然界的一切具体存在的事物都可以看做一个实体。
就数据库而言,实体往往指某类事物的集合。

比如MySQL数据库中,一个表todo的结构如下:

CREATE TABLE `todo` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `user_id` int(11) unsigned NOT NULL DEFAULT '0',
  `title` varchar(255) NOT NULL DEFAULT '',
  `description` text NOT NULL,
  `views` int(11) unsigned NOT NULL DEFAULT '0',
  `is_star` tinyint(4) NOT NULL DEFAULT '0',
  `is_finish` tinyint(11) unsigned NOT NULL DEFAULT '0',
  `create_time` int(11) unsigned NOT NULL DEFAULT '0',
  `update_time` int(11) unsigned NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

TypeORM 中定义一个实体类,对应一个数据库的表(或MongoDB的集合),可以通过 @Entity() 注解实现.

默认的,类名应该和表名一直,比如以下示例中的class名为Todo, 表名对应为todo

import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm';

@Entity()
export class Todo {
  @PrimaryGeneratedColumn() 
  id: number;
  
  @Column('int') 
  user_id: number;

  @Column({ length: 255 })
  title: string;

  @Column('text') 
  description: string;

  @Column('tinyint') 
  is_finish: boolean;

  @Column('int') 
  create_time: number;  
  
  @Column('int') 
  update_time: number;
}

如果实体类名和表名不一致,可以在@Entity()注解中传入表名字段。

// 表名: my_todo_list
@Entity('my_todo_list')

获取一条记录结果:

{
    "id": 12,
    "user_id": 112233,
    "title": "learn TypeORM",
    "description": "hello,TypeORM",
    "views": 2,
    "is_star": false,
    "is_finish": 0,
    "create_time": 1545198789,
    "update_time": 1545198789
}

实体的列表(Columns)

// 主键
@PrimaryColumn()
id: number;

// 自增主键
@PrimaryGeneratedColumn()
id: number;

// int型普通字段
@Column("int")
user_id: number;

// tinyint型普通字段
@Column('tinyint') 
is_finish: boolean;

@Column()
title: string;

支持的字段类型(mysql/mariadb):

// Column types for mysql / mariadb
int, tinyint, smallint, mediumint, bigint, float, double, dec, 
decimal, numeric, date, datetime, timestamp, time, year, char, 
varchar, nvarchar, text, tinytext, mediumtext, blob, longtext, 
tinyblob, mediumblob, longblob, enum, json, binary, geometry, 
point, linestring, polygon, 
multipoint, multilinestring, multipolygon, 
geometrycollection

@Column()注解中,可以传入一个Object,可以指定字段的类型、大小等待属性:

// 指定为 int 类型
@Column("int")
// or
@Column({ type: "int" })

// 指定为 varchar 类型, 长度200个字符
@Column("varchar", { length: 200 })
// or
@Column({ type: "varchar", width: 200 })

有的时候,我们接口返回值和数据库字段不是一一对应的。

如果想要实体名称与表字段名称不同, 设置name属性即可:

@Column({type:'int', name: 'user_id'}) 
userId: number;

@Column({type:'int', name: 'create_time'}) 
createTime: number;  

@Column({type:'tinyint', name: 'is_finish'}) 
isFinish: boolean;

修改后代码如下:

import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm';

// 表名为: my_todo_list
@Entity('my_todo_list')
export class Todo {
  @PrimaryGeneratedColumn() 
  id: number;
  
  @Column({type:'int', name: 'user_id'}) 
  userId: number;

  @Column({ length: 255 })
  title: string;

  @Column('text') 
  description: string;

  @Column({type:'int', name: 'is_finish'}) 
  isFinish: boolean;

  @Column({type:'int', name: 'create_time'}) 
  createTime: number;  
  
  @Column({type:'int', name: 'update_time'}) 
  updateTime: number;
}

获取一条记录结果:

{
    "id": 12,
    "userId": 112233,
    "title": "learn TypeORM",
    "description": "hello,TypeORM",
    "views": 2,
    "isStar": false,
    "isFinish": 0,
    "createTime": 1545198789,
    "updateTime": 1545198789
}

参考链接:

http://typeorm.io/#/entities/column-types-for-mysql--mariadb

[END]

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在TypeORM中使用实体@Entity与字段@Column注解 的相关文章

  • 使用 NestJS 和 Fastify 时多部分表单数据正文为空

    我们正在迁移自express to fastify in our nestJS应用 这multipart form data后置控制器中支持的 json 正文而不是文件 在迁移后不起作用 我们有typeorm swagger也已插入 如有任
  • 尝试运行迁移时的 Typeorm:缺少必需参数:dataSource

    我正在尝试运行 TypeORM 迁移ormconfig json像这样 name default type postgres host ip is here port 5432 username name password 12345 da
  • 如何与核心数据创建多对多关系?斯威夫特,Xcode

    我有 2 个实体 实体 1 人 实体2 书籍 人们实体有一个属性 它是他们最喜欢的书籍的字符串名称数组 我需要创建一种关系 以某种方式将一个人最喜欢的书映射到相应的书籍实体对象 我不知道该怎么做 到目前为止 我首先通过将目的地设置为 书籍
  • 对数据库的更改已成功提交...ObjectContext 可能处于不一致的状态

    对数据库的更改已成功提交 但更新对象上下文时发生错误 ObjectContext 可能处于不一致的状态 内部异常消息 无法在实体类型 Evalv Services usedetail 上设置字段 属性登录 用于登录和员工的实体框架类 pub
  • 如何使用 Jest 单元测试覆盖 TypeORM @Column 装饰器?

    我希望尽可能多地对我的应用程序进行单元和端到端测试 我的目标是覆盖率达到 101 我的设置现在的问题是 typeorm 的 Column 装饰器使用箭头函数来设置默认值 例如数据库更新的当前时间戳 这个箭头函数没有被玩笑测试覆盖 消息是 s
  • 实体框架:获取不直接相关的对象

    我正在为我的 NET 应用程序使用实体框架 我也能够返回对象及其直接相关的对象 非常方便 但我在获取这些对象的对象时遇到问题 IEnumerable
  • ASP.NET MVC 4 引用单父实体的多个外键

    我正在尝试开发一个 ASP NET MVC 4 应用程序 可以根据玩家的进攻 防守和助攻技能对他们进行评级 进攻 防守和助攻是球员表上的外键 引用相同的查找表 评分 我有以下父实体 public class Rating public in
  • NestJS,如何以及在哪里构建响应 DTO

    我一直在使用Java Spring框架来开发微服务 最近 我开始探索 NestJS 并有一个关于构建响应 DTO 的问题 在春天 控制器是轻量级的 它们将调用交给服务层 服务层实现业务逻辑 最后 它们调用负责构建响应 DTO 的 Mappe
  • 对于这个实体层次结构来说,什么是好的持久性设计?

    我是 JPA 新手 正在尝试制定以下课程的设计 所有类都重写了 equals 和 hashcode getter 和 setter 以及空构造函数 我有一个所有实体的基类 public abstract class BaseEntity p
  • ASP.NET 应用程序中的实体框架 ObjectContext 单元测试

    我使用以下代码为每个 ASP NET 请求创建实体框架 ObjectContext public static class ObjectContextPerRequest public static EStudyTestDatabaseEn
  • 在下面的模型中,地址不应该是值对象吗?

    From 值对象如何存储在数据库中 https stackoverflow com questions 679005 how are value objects stored in the database 假设公司和个人都有相同的邮件地址
  • 类型错误:类扩展值未定义不是函数或 null

    尝试创建这些实体时出现以下错误 TypeError Class extends value undefined is not a function or null 我假设这与循环依赖有关 但是在使用表继承和一对多关系时应该如何避免这种情况
  • Hibernate 和可序列化实体

    有谁知道是否有一个框架能够从实体类中剥离 Hibernate 集合以使它们可序列化 我查看了 BeanLib 但它似乎只进行实体的深层复制 而不允许我为实体类中的集合类型指定实现映射 BeanLib 目前不适用于 Hibernate 3 5
  • ADO 实体框架创建不需要的实体键

    我需要使用无法更改的数据库中的表 使用链接服务器 因此 我的架构的一部分是这些表的视图 我无法在数据库中创建 FK 当我在 ADO NET 实体框架中创建关联时 我遇到了问题 因为外部数据库表上的第二列有一个索引 并且 EF 正在为其创建一
  • 让 Jest 全局设置和全局拆卸在 TypeScript 项目中工作

    我想运行一个在运行测试之前打开数据库连接的函数 全局设置 以及另一个在运行测试后关闭数据库连接的函数 全局拆卸 目前我有以下配置 包 json jest testEnvironment node globalSetup src jest g
  • Java EE 企业应用程序:在部署/启动时执行一些操作[重复]

    这个问题在这里已经有答案了 我想在部署我的应用程序 具有业务逻辑 EJB 和客户端 Web 的企业应用程序 后立即执行某些操作 例如 我想让某个实体处于持久状态 或者以其他方式创建一个文件 我怎样才能做到这一点 Thanks 配置Serlv
  • Symfony2:PrePersist/PreUpdate 生命周期事件未触发

    两个实体画廊相册 and 画廊图片具有 OneToMany ManyToOne 关系 One GalleryAlbum can have gt Many GalleryImage Many GalleryImage can be in gt
  • 为实体框架中的实体创建基类

    我想创建一个对我的所有实体都通用的基类 该类将具有 Save Delete GetByID 等方法以及其他一些基本功能和属性 我在 Linq to SQL 方面有更多经验 希望能在 EF 中获得一些类似的好示例 谢谢 像这样 public
  • 如何使用 Linq 将实体表与交叉引用表连接起来

    首先我要说的是 我对 Linq 比较陌生 但我似乎很快就掌握了其中的大部分内容 但这个问题却难倒了我 我找了又找都没有结果 我使用代码优先并创建了 2 个模型 项目 和 关键字 他们之间存在多对多的关系 我的实体模型如下所示 public
  • Symfony 2:实体的位置

    我是 Symfony 2 的新手 我想知道一些事情 假设我的项目中有 2 个捆绑包 我想在两个包中使用从我的数据库生成的实体 我应该在哪里生成实体 对我来说 最好的方法是在捆绑包之外 但我不知道如何做到这一点 感谢您的帮助 我认为有两种解决

随机推荐