Chapter
12 · TypeORM (Entities + Migrations)
TypeORM quickstart for Next: entities, data source, usage, and migration guidance.
Mental Model
- Explicit entities + repositories; migrations-first in prod.
- Great for long-lived schemas and SQL-heavy workflows.
Install
npm install typeorm reflect-metadata sqlite3Data Source (SQLite dev)
import "reflect-metadata";
import { DataSource } from "typeorm";
import { User } from "@/entities/User";
import { Post } from "@/entities/Post";
export const AppDataSource = new DataSource({
type: "sqlite",
database: "dev.db",
synchronize: true, // dev only
entities: [User, Post],
});Entities
// entities/User.ts
import { Entity, PrimaryGeneratedColumn, Column, OneToMany } from "typeorm";
import { Post } from "./Post";
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column({ unique: true })
email: string;
@OneToMany(() => Post, (post) => post.author)
posts: Post[];
}Usage
await AppDataSource.initialize();
const repo = AppDataSource.getRepository(User);
await repo.find({ relations: ["posts"] });SQLite → Postgres
- Set type: "postgres", url: process.env.DATABASE_URL.
- Use migrations (typeorm migration:generate/run) instead of synchronize in prod.