ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • NestJs TypeOrm 엔티티 공통 컬럼 관리
    공부하기/node.js 2023. 2. 24. 18:38

    TypeOrm을 사용하여 엔티티를 선언할 때 공통적으로 들어가는 컬럼들을 모든 엔티티에 하나하나 선언하는건 

    유지보수 측면에서 너무 불편하다고 판단했다.

    예를들어 id, created_at, updated_at가 있다.

    공통적으로 여러 엔티티에서 사용하는 컬럼들은 쉽게 관리할 수 있도록 추상클래스에 선언한 후 추상 클래스를 extends사용할 계획이다.

     

    클래스가 아닌 추상 클래스를 선택한 이유 : 직접 사용할 일이 없기 때문에 추상 클래스를 선택

     

     

    1. 공통적으로 사용될 id, created_at, updated_at 컬럼이 선언된 BaseEntity 추상 클래스를 선언한다.

    import {
      CreateDateColumn,
      Entity,
      PrimaryGeneratedColumn,
      UpdateDateColumn,
    } from 'typeorm';
    
    @Entity()
    export abstract class BaseEntity {
      @PrimaryGeneratedColumn()
      id: number;
    
      @CreateDateColumn()
      created_at: Date;
    
      @UpdateDateColumn()
      updated_at: Date;
    }

     

    2.  적용할 Entity의 id, created_at, updated_at 제거한 후 BaseEntity extends 한다. 

    import { Question } from '../question/question.entity';
    import { Column, Entity, OneToMany, PrimaryGeneratedColumn } from 'typeorm';
    import { BaseEntity } from '../common/base-entity';
    
    @Entity({
      name: 'survey',
    })
    export class Survey extends BaseEntity {
      @Column({ comment: '설문지 이름' })
      name: string;
    
      @Column({ comment: '설문지 설명' })
      description: string;
    
      @OneToMany((type) => Question, (question) => question.survey)
      questions: Question[];
    }

     

    결과

Designed by Tistory.