TypeORM @JoinColumn vs @JoinTable
TypeORM @JoinColumn vs @JoinTable
TypeORM을 사용하며 joinColumn, joinTable이라는
두가지의 데코레이터가 존재하는데 궁금해서 간단하게 정리
@JoinColumn
@Entity()
class User {
@PrimaryGeneratedColumn()
id: number;
@OneToMany(() => Post, post => post.author)
posts: Post[];
}
@Entity()
class Post {
@PrimaryGeneratedColumn()
id: number;
@ManyToOne(() => User, user => user.posts)
@JoinColumn({ name: "authorId" })
author: User;
}
1.주로 One To One orManyToOne 관계에서 사용됨.
2.외래키를 명시한 테이블에 추가함.
3.위의 경우 Post테이블에 외래키가 추가됨.
@JoinTable
@Entity()
class Post {
@PrimaryGeneratedColumn()
id: number;
@ManyToMany(() => TagsModel, (tag) => tag.posts)
@JoinTable()
tags: TagsModel[];
}
1.주로 ManyToMany관계에서 사용됨.
2.별도의 중간 테이블을 생성함.
3.위와 같은 경우 post_tags_tag등의 중간 테이블이 생성됨.
# TypeORM @JoinColumn vs @JoinTable TypeORM을 사용하며 joinColumn, joinTable이라는 두가지의 데코레이터가 존재하는데 궁금해서 간단하게 정리 ### @JoinColumn ```js @Entity() class User { @PrimaryGeneratedColumn() id: number; @OneToMany(() => Post, post => post.author) posts: Post[]; } @Entity() class Post { @PrimaryGeneratedColumn() id: number; @ManyToOne(() => User, user => user.posts) @JoinColumn({ name: "authorId" }) author: User; } ``` > 1.주로 One To One orManyToOne 관계에서 사용됨. > >2.외래키를 명시한 테이블에 추가함. > > 3.위의 경우 Post테이블에 외래키가 추가됨. ### @JoinTable ```js @Entity() class Post { @PrimaryGeneratedColumn() id: number; @ManyToMany(() => TagsModel, (tag) => tag.posts) @JoinTable() tags: TagsModel[]; } ``` > 1.주로 ManyToMany관계에서 사용됨. > > 2.별도의 중간 테이블을 생성함. > > 3.위와 같은 경우 post_tags_tag등의 중간 테이블이 생성됨. <a href="https://stackoverflow.com/questions/30288464/when-should-i-use-joincolumn-or-jointable-with-jpa" target="_blank">[참조]</a>