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 Manuscrito
Converte texto digitado em uma imagem com aparência de letra manuscrita. Útil para tornar trabalhos digitais mais pessoais.
Gerador de Currículo
Preenche um currículo simples (CV) imprimível em A4 a partir de formulário com dados pessoais, formação e experiência.
Gerador de Favicon
Gera favicon a partir de texto/emoji em todos os tamanhos comuns (16, 32, 48, 64, 192, 512). Download como PNG.