웅글웅글: Nest 게시판 + 채팅 3. Entity: 일단 기본 내용 정리

메밀·2024년 2월 6일
0

웅글웅글: NestJS

목록 보기
3/9
post-thumbnail

1. NestJS 승리🎉

넘 신기하구 재밌고 이상한(극찬) 부분이 많아서 NestJS 승리!
그러나 이번 포스팅에서는 기본적인 개념 정리만 다룰 것이다

2. 거기서 거기인 부분들

1) 기본 데코레이터는 거의 비슷

기본적으로 엔티티를 작성하는 법은 비슷비슷하다.

.TypeORMJPA
class@Entity()@Entity
PK(auto_increment)@PrimaryGeneratedColumn()@Id
@GeneratedValue(Strategy = GenerationType.IDENTITY)
column@Column()@Column()
date@CreatedDateColumn()
@UpdatedDateColumn()
@DeleteDatedColumn()
@CreatedDate
@LastModifiedDate

2) 연관 관계 설정도 거의 비슷

거의 비슷해서 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...)

3. 재밌는 부분은 다음 포스팅에서👋

fetchType, Lazy Loading, 연관관계의 주인 등 TypeORM에서 신기하구 재밌다고 느꼈던 점이 많다.
그치만 그건 다음 기회에..!!

0개의 댓글