TypeORM @JoinColumn vs @JoinTable

Views:
12
Category:
Post
Posted on:
2024. 8. 28.

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>