인프런 커뮤니티 질문&답변

전은정님의 프로필 이미지

작성한 질문수

[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core

BaseModel 적용하기

[BaseModel 적용하기] BaseModel에 작성된 id 프로퍼티를 OneToOne Relation의 외래키로 지정할 수 있나요?

23.11.02 13:37 작성

·

370

0

// Base.entity.ts
export abstract class BaseEntity {
   @PrimaryGeneratedColumn('increment')
   id: number;

   @CreatedDateColumn()
   createdAt: Date;

   @UpdatedDateColum()
   updatedAt: Date;
}

 

// User.entity.ts
@Entity()
export class User extends BaseEntity {
   @Column({
     unique: true,
   })
   email: string,

   @Column()
   password: string,

   @OneToOne(() => UserGrade, (userGrade) => userGrade.id)
   @JoinColumn()
   grade_id: number;
}

 

// UserGrade.entity.ts
@Entity()
export class UserGrade extends BaseEntity {
   @Column()
   grade: string;
}

 

BaseModel이 되는 BaseEntity가 있고, User와 UserGrade가 각각 BaseEntity를 상속받고 있는 형태입니다.

 

따라서, 각 엔티티의 기본키가 되는 id를 BaseModel에 생성되어 있습니다.

 

제가 궁금한 점은, User 엔티티 내에 `grade_id` 라는 프로퍼티를 만들고, 이것을 UserGrade의 id와 OneToOne 관계를 맺어주고 싶은데 id 프로퍼티를 찾지 못해 연결을 못했습니다.

 

제가 시도했던 방법은 추상 클래스가 아니라 생성자를 통해 자식 클래스(엔티티)로부터 id 값을 받아오는 방식을 사용해서 아래와 같이 작성해 봤습니다.

 

말은 안되지만 이런저런 시도를 해보았는데, 각각 연결이 안되었습니다...

export class BaseEntity {
   constructor(obj: BaseEntity) {
     this.id = obj.id;
     this.createdAt = obj.createdAt;
     this.updatedAt = obj.updatedAt;
   }

  @PrimaryGeneratedColumn('increment')
   id: number;

   @CreatedDateColumn()
   createdAt: Date;

   @UpdatedDateColum()
   updatedAt: Date;

}

 

// User.Entity.ts
@Entity()
export class User extends BaseEntity {
  constructor(obj: User) {
    super(obj);
    Object.assign(this, obj);  
  }

  ...... 생략

   @OneToOne(() => UserGrade, (userGrade) => userGrade.id)
   @JoinColumn()
   grade_id: number;
}
// UserGrade.Entity.ts
@Entity()
export class UserGrade extends BaseEntity {
   constructor(obj: UserGrade) {
     super(obj);
     Object.assign(this, obj);


    @OneToOne(() => User, (user) => user.grade_id)
   super.id
   }
}

 

혹시 이렇게 BaseEntity에서 공통되는 프로퍼티들을 관리하는 경우에, id 값을 외래키로 지정해서 연결해줄 수 있는지 궁금합니다.

답변 1

0

코드팩토리님의 프로필 이미지
코드팩토리
지식공유자

2023. 11. 03. 10:00

안녕하세요!

질문을 잘 이해 못하겠습니다.

User 모델에서 grade_id 프로퍼티를 생성하고 Grade의 id 프로퍼티를 연결 잘 하신 것 같은데 어떤 문제가 있는걸까요?

참고로 Typeorm 테이블과 인스턴스화의 상관관계는 없습니다.

감사합니다!