TypeORM Decorators Cheatsheet

Quick reference for TypeORM: entity decorators, columns, relations, indexes, listeners, and query operations.

FeatureDescriptionExampleCategory
@Entity()Define database entity/table@Entity() class User { // properties }Entity
@PrimaryGeneratedColumn()Auto-increment primary key@PrimaryGeneratedColumn() id: number;Entity
@PrimaryColumn()Define primary key column@PrimaryColumn() id: string;Entity
@Generated("uuid")Auto-generate UUID@PrimaryGeneratedColumn("uuid") id: string;Entity
@Column()Basic column definition@Column() name: string;Columns
@Column({ type })Column with specific type@Column({ type: "varchar", length: 100 }) email: string;Columns
@Column({ nullable })Allow null values@Column({ nullable: true }) middleName?: string;Columns
@Column({ unique })Unique constraint@Column({ unique: true }) email: string;Columns
@Column({ default })Default column value@Column({ default: true }) isActive: boolean;Columns
@CreateDateColumn()Auto-set creation timestamp@CreateDateColumn() createdAt: Date;Columns
@UpdateDateColumn()Auto-update timestamp@UpdateDateColumn() updatedAt: Date;Columns
@DeleteDateColumn()Soft delete timestamp@DeleteDateColumn() deletedAt: Date;Columns
@VersionColumn()Optimistic locking version@VersionColumn() version: number;Columns
@OneToOne()One-to-one relationship@OneToOne(() => Profile) @JoinColumn() profile: Profile;Relations
@OneToMany()One-to-many relationship@OneToMany(() => Post, post => post.user) posts: Post[];Relations
@ManyToOne()Many-to-one relationship@ManyToOne(() => User, user => user.posts) user: User;Relations
@ManyToMany()Many-to-many relationship@ManyToMany(() => Role) @JoinTable() roles: Role[];Relations
@JoinColumn()Specify join column@JoinColumn({ name: "user_id" }) user: User;Relations
@JoinTable()Join table for many-to-many@JoinTable({ name: "user_roles" }) roles: Role[];Relations
@Index()Create database index@Index() @Column() email: string;Indexes
@Index(multiple)Composite index@Entity() @Index(["firstName", "lastName"]) class User {}Indexes
@Unique()Unique constraint@Entity() @Unique(["email"]) class User {}Indexes
@BeforeInsert()Hook before insert@BeforeInsert() hashPassword() { this.password = hash(this.password); }Listeners
@AfterInsert()Hook after insert@AfterInsert() logInsert() { console.log("Inserted:", this.id); }Listeners
@BeforeUpdate()Hook before update@BeforeUpdate() validateUpdate() { // validation logic }Listeners
@AfterUpdate()Hook after update@AfterUpdate() logUpdate() { console.log("Updated:", this.id); }Listeners
@BeforeRemove()Hook before deletion@BeforeRemove() cleanup() { // cleanup logic }Listeners
@AfterLoad()Hook after entity loaded@AfterLoad() computeFullName() { this.fullName = this.firstName + " " + this.lastName; }Listeners
Find AllRetrieve all entitiesconst users = await userRepo.find();Query
Find OneFind single entityconst user = await userRepo.findOne({ where: { id: 1 } });Query
Find with RelationsLoad related entitiesconst user = await userRepo.findOne({ where: { id: 1 }, relations: ["posts"] });Query
SaveInsert or update entityconst user = new User(); user.name = "John"; await userRepo.save(user);Query
RemoveDelete entityawait userRepo.remove(user);Query
Query BuilderComplex queriesconst users = await userRepo .createQueryBuilder("user") .where("user.age > :age", { age: 18 }) .getMany();Query