Gerador de TypeORM entity a partir de tabela
Gera uma classe TypeORM (TypeScript) com @Entity, @PrimaryGeneratedColumn e colunas básicas — a partir do nome da tabela.
—
Entities TypeORM: decorators, relações e migrations
TypeORM é um ORM para TypeScript / JavaScript criado por Umed Khudoiberdiev em 2016, amplamente adotado por NestJS, Adonis e muitos back-ends Node corporativos. Sua marca registrada é a definição de entities baseada em decorators: classes anotadas com @Entity, @Column e decorators de relação servem ao mesmo tempo como modelos de runtime, fonte de migrations e definições de tipo. Como a mesma classe dirige o schema do banco e o código da aplicação, o sistema de tipos pega tipos de divergência que costumam atormentar projetos com SQL escrito à mão e classes de modelo separadas.
Este gerador monta uma entity básica para uma única tabela; a referência abaixo cobre o catálogo completo de decorators, o trade-off Active Record vs Data Mapper, o query builder, migrations, soft delete e como o TypeORM se compara ao Prisma, Sequelize e às alternativas mais recentes ganhando força.
Decorators e exemplo completo
import {
Entity, PrimaryGeneratedColumn, Column,
OneToMany, ManyToOne, CreateDateColumn,
UpdateDateColumn, DeleteDateColumn, Index,
} from 'typeorm';
@Entity()
@Index(['email'], { unique: true })
export class User {
@PrimaryGeneratedColumn('uuid')
id: string;
@Column({ length: 100 })
name: string;
@Column({ unique: true })
email: string;
@OneToMany(() => Post, post => post.author)
posts: Post[];
@CreateDateColumn() createdAt: Date;
@UpdateDateColumn() updatedAt: Date;
@DeleteDateColumn() deletedAt: Date | null;
}
Os principais decorators: @Entity, @Column, @PrimaryGeneratedColumn('uuid' | 'increment' | 'rowid'), @OneToOne, @OneToMany, @ManyToOne, @ManyToMany + @JoinTable, @Index, @Unique, @Check, @CreateDateColumn, @UpdateDateColumn, @DeleteDateColumn (soft delete) e @VersionColumn para optimistic locking.
Active Record vs Data Mapper, repositories e query builder
TypeORM é um dos poucos ORMs que suporta os dois padrões. Active Record anexa métodos de persistência à entity (user.save(), User.findOne()) — conciso, mas acopla modelos ao banco. Data Mapper separa entities de repositories (userRepo.save(user)) — mais boilerplate, mais fácil de testar, é o default do NestJS. O QueryBuilder oferece uma alternativa typesafe ao SQL bruto para consultas complexas:
const result = await userRepo
.createQueryBuilder('user')
.leftJoinAndSelect('user.posts', 'post')
.where('user.createdAt > :desde', { desde })
.orderBy('user.createdAt', 'DESC')
.take(50)
.getMany();
Migrations e soft delete
O comando typeorm migration:generate compara suas entities com o schema atual do banco e emite uma migration TypeScript com métodos up() e down(); typeorm migration:run aplica as pendentes em ordem. Os metadados ficam em uma tabela migrations. Soft delete usa o @DeleteDateColumn: chamar repo.softDelete(id) preenche a coluna com o timestamp atual, e os find() subsequentes excluem as linhas soft-deletadas automaticamente. Para recuperar uma linha, chame repo.restore(id); para incluir as removidas, use withDeleted: true.
Suporte a bancos e ecossistema
- Drivers suportados: PostgreSQL, MySQL, MariaDB, SQLite, Oracle, MS SQL Server, CockroachDB e suporte parcial a MongoDB.
- NestJS distribui
@nestjs/typeormcom injeção de repositories no nível de módulo — era o default tradicional antes do Prisma ganhar tração. - vs Prisma: Prisma é schema-first (um arquivo Prisma gera um cliente totalmente tipado). TypeORM é class-first. A DX e a inferência de TS do Prisma são mais afiadas; o TypeORM é mais flexível para schemas legados e consultas ad-hoc.
- vs Sequelize: o Sequelize é mais antigo que o TypeScript e os tipos foram acoplados depois; o TypeORM é nativo de TS. O Sequelize tem mais quilometragem em workloads de alto throughput.
- Alternativas em alta: MikroORM (abordagem por decorators similar, mais Unit of Work e Identity Map), Drizzle (SQL builder enxuto com inferência TS) e Kysely (query builder tipado sem camada de ORM).
FAQ
Prisma substituiu o TypeORM? Não — eles coexistem. Projetos greenfield muitas vezes escolhem Prisma pela DX; bases TypeORM existentes seguem produtivas, sobretudo com joins complexos ou schemas legados. Em 2026, ambos são escolhas válidas.
Funciona bem com NestJS? Muito. O @nestjs/typeorm integra entities aos módulos e injeta repositories em services com um decorator. Vários tutoriais de NestJS ainda usam TypeORM por padrão.
Como faço soft delete? Adicione um @DeleteDateColumn à entity e chame repo.softDelete() em vez de delete(). Para listar registros removidos, defina withDeleted: true nas opções de busca.
Vale se preocupar com o momentum? A manutenção desacelerou em 2022–2023 quando o mantenedor original se afastou, mas o projeto segue ativo e amplamente em produção. Se você está começando do zero e quer o ecossistema mais ativo, olhe Prisma, Drizzle ou MikroORM; se já tem código TypeORM, não há urgência em migrar.
Ferramentas Relacionadas
Gerador de migration Knex a partir de tabela
Gere uma migration do Knex.js (createTable e dropTable) a partir do nome de uma tabela. Acelere a criação de migrações de banco de dados no seu projeto Node.js.
Gerador de TypeScript interface a partir de tabela
Gere uma interface TypeScript a partir do nome de uma tabela, com campos tipados. Acelere a tipagem dos seus models e copie o código para o projeto.
Gerador de migration Flyway a partir de tabela
Gere um arquivo de migration do Flyway (V1__create_table.sql) com CREATE TABLE a partir do nome de uma tabela. Versione o schema do seu banco em projetos Java.