Problem
typeorm
을 이용해서 구현 시 updatedAt
와 createdAt
같은 컬럼을 대부분 엔티티에 공통으로 추가해주고 싶었다. sequelize
1를 사용했을 때는 이부분을 자동으로 해줘서 상대적으로 편리 했었지만 typeorm
에서는 직접 작업해 줘야 했다.
export class TimestampableEntity {
@CreateDateColumn({
type: 'timestamp',
default: () => 'CURRENT_TIMESTAMP',
})
public createdAt: Date;
@UpdateDateColumn({
type: 'timestamp',
default: () => 'CURRENT_TIMESTAMP',
})
public updatedAt: Date;
}
위와 같이 TimestampableEntity
를 이를 구현하고 상속 받은 다른 엔티티들을 사용하고자 했다.
export class UserEntity extends TimestampableEntity {
...
}
동작은 했지만 createdAt
와 updatedAt
이 모든 컬럼의 가장 앞쪽에 생성되는 되는 문제가 생겼다.
Solution
안타깝지만 방법은 없었다. 여기2에서 자세한 내용은 확인할 수 있었다. 항상 ORM
만을 이용해서 작업 한다면 상관 없겠지만 (대부분 그렇지 않으므로) 직접 쿼리해야 하는 상황이라면, 중요 필드가 뒷쪽에 위치할 경우 그 만큼 가독성이 떨어질 수 밖에 없었다. typeorm
에서는 정의한 순서대로 필드의 순서가 보장되는 것은 아니지만, 상위 엔티티의 필드가 가장 앞쪽에 위치하는 것이 싫다면 typeorm
의 inheritance
는 사용지 말아야 한다.