id, createdAt, updatedAt 등 모든 엔티티에 공통된 속성을 따로 생성
다른 엔티티는 베이스 엔티티를 상속받아 사용
import { BaseEntity, CreateDateColumn, PrimaryGeneratedColumn, UpdateDateColumn } from "typeorm";
export default abstract class Entity extends BaseEntity{
@PrimaryGeneratedColumn()
id: number;
@CreateDateColumn()
createdAt: Date;
@UpdateDateColumn()
updatedAt: Date;
}
Entity A가 Entity B의 인스턴스 여러개와 연관되는 경우 관계의 소유는 Entity B이며 Entity A의 Id를 저장한다.
@OneToMany(()=> Post, (post)=>post.user)
posts: Post[]
Entity C가 오로지 하나의 Entity D 인스턴스와 연관되는 경우 관계의 소유는 Entity C이며 Entity D의 Id를 저장한다.
관계에서 어느 쪽이 외래키(FK)를 가지고 있는지 표시
typeorm 데코레이터에서는 OneToOne일 때 필수
@ManyToOne(()=>User)
@JoinColumn({name: 'username',referencedColumnName:'username'})
user: User;
엔티티 생성 시 상태와 행위를 정의하여 프론트엔드에서 사용할 수 있다.
주로 getter와 다른 method를 노출
import {Expose} from 'class-transformer'
export class User{
id: number;
firstName: string;
lastName: string;
@Expose()
get name(){
return this.firstName+' '+this.lastName;
}
}
property 변환시 건너뛰어 형 변환 결과에는 담기지 않는다. 즉, 프론트엔드에서 사용 불가능
import {Exclude} from 'class-transformer'
export class User{
id: number;
email: string;
@Exclude()
password: string
}