넘 신기하구 재밌고 이상한(극찬) 부분이 많아서 NestJS 승리!
그러나 이번 포스팅에서는 기본적인 개념 정리만 다룰 것이다
기본적으로 엔티티를 작성하는 법은 비슷비슷하다.
. | TypeORM | JPA |
---|---|---|
class | @Entity() | @Entity |
PK(auto_increment) | @PrimaryGeneratedColumn() | @Id @GeneratedValue(Strategy = GenerationType.IDENTITY) |
column | @Column() | @Column() |
date | @CreatedDateColumn() @UpdatedDateColumn() @DeleteDatedColumn() | @CreatedDate @LastModifiedDate |
거의 비슷해서 JPA를 다뤄봤다면 TypeORM으로 엔티티를 만드는 것에 큰 시간은 안 걸릴 듯.
우선 TypeORM으로 연관관계를 설정하는 예시는 다음과 같다.
////////// board.entity.ts ⭐️
// ManyToOne 단방향
@ManyToOne(() => User, { onDelete: "CASCADE" })
user: User;
// OneToMany 양방향
@OneToMany(() => Comment, comment => comment.board)
comments: Comment[];
////////// comment.entity.ts ⭐️
// ManyToOne 양방향
@ManyToOne(() => Board, { onDelete: "CASCADE" })
board: Board;
같은 코드를 JPA로 작성하면 다음과 같을 것이다.
/////////// Board.java ⭐️
// ManyToOne 단방향
@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.REMOVE)
private User user;
// OneToMany 양방향
@OneToMany(mappedBy = "board", fetch = FetchType.LAZY)
private List<Comment> comments = new ArrayList<>();
////////// Comment.java ⭐️
// ManyToOne 양방향
@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.REMOVE)
private Board board;
TypeORM에서 관계 매핑 시 사용하는 파라미터는 다음 세 가지다.
parameter | 예시 | 설명 |
---|---|---|
typeFunctionOrTarget | () => Comment | 관계 맺을 엔티티 타입 |
inverseSide? | (comment) => comment.board | 역방향 관계 Entity2를 받아, Entity1을 반환 |
options? | { cascade: true } | 추가 옵션 (cascade, lazy, eager...) |
fetchType, Lazy Loading, 연관관계의 주인 등 TypeORM에서 신기하구 재밌다고 느꼈던 점이 많다.
그치만 그건 다음 기회에..!!