@Join 없는 곳 설정 안하면 단방향이 됨.
- OneToOne
// User
@OneToOne(() => ProfileModel, (profile) => profile.user)
profil: ProfileModel;
// Profile
@OneToOne(() => UserModel, (user) => user.profil)
@JoinColumn() // JoinColumn 있는곳에 컬럼 생김
user: UserModel;
JoinColumn 있는곳에 컬럼 생김
https://typeorm.io/one-to-one-relations
- OneToMany, ManyToOne
// User
@OneToMany(() => PostModel, (post) => post.author)
posts: PostModel[];
// Post
@ManyToOne(() => UserModel, (user) => user.posts)
author: UserModel;
ManyToOne에 컬럼 생김, OneToMany의 타입에는 [] 붙여주기
https://typeorm.io/many-to-one-one-to-many-relations
- ManyToMany
// Tag
@ManyToMany(() => PostModel, (post) => post.tags)
posts: PostModel[];
// Post
@ManyToMany(() => TagModel, (tag) => tag.posts)
@JoinTable() // JoinTable 있는 곳이 테이블 이름의 앞에 옴.
tags: TagModel[];
테이블이 새로 생김. JoinTable 있는 곳이 테이블 이름의 앞에 옴.
https://typeorm.io/many-to-many-relations
- Relation Options
@OneToOne(() => ProfileModel, (profile) => profile.user, {
// find() 실행할 때마다 항상 같이 가져올 relation
eager: true,
// 저장할 때 relation의 데이터도 한번에 저장 가능
cascade: true,
// null이 가능한지
nullable: false,
// 관계가 삭제됐을때
// no action -> 아무것도 안함
// cascade: -> 참조하는 Row도 같이 삭제
// set null -> 참조하는 Row에서 참조 id를 null로 변경
// set default -> 기본 세팅으로 설정 (테이블의 기본 세팅)
// restrict -> 참조하는 있는 Row가 있는 경우 참조당하는 Row 삭제 불가
onDelete: 'RESTRICT',
})
profil: ProfileModel;
++ ManyToMany 직접 생성
@Entity()
export class MovieUserLike {
@PrimaryColumn({
name: 'movieId',
type: 'int8',
})
@JoinColumn({ name: 'movieId' })
@ManyToOne(() => Movie, (movie) => movie.likedUsers, { onDelete: 'CASCADE' })
movie: Movie;
@PrimaryColumn({
name: 'userId',
type: 'int8',
})
@JoinColumn({ name: 'userId' })
@ManyToOne(() => User, (user) => user.likedMovies, { onDelete: 'CASCADE' })
user: User;
@Column()
isLike: boolean;
}
Composite Primary Key 사용
++ PrimaryColumn 설정하면 컬럼이 중복생성되는듯.
ManyToMany를 직접 생성하는 이유는 다른데 있으니 PK를 따로 하나 만드는게 나을듯
그냥 PrimaryColumn만 하면 관계 컬럼도 생겨서, JoinColumn으로 명시해줘야 관계 컬럼 생성 안됨.
++ 강의에서는 이름이 그냥 id였기 때문에 자동 생성되는 관계 컬럼이 userId로 설정한 이름과 동일하여 중복 컬럼이 생성안된듯.
하지만 나는 userId라고 이름을 지었었기 때문에 userUserId로 관계 컬럼이 생성되어서 userId와 userUserId로 이렇게 중복 컬럼이 생성되었던듯. 그래서 이를 하나로 합치기 위해 JoinColumn으로 명시를 해준거고.
++ JoinColumn 처리했더니 데이터 조회할때 where 문 조건 제대로 안먹혀서 쿼리빌더 사용함
학습 페이지
www.inflearn.com
https://fastcampus.co.kr/classroom/239666
커리어 성장을 위한 최고의 실무교육 아카데미 | 패스트캠퍼스
성인 교육 서비스 기업, 패스트캠퍼스는 개인과 조직의 실질적인 '업(業)'의 성장을 돕고자 모든 종류의 교육 콘텐츠 서비스를 제공하는 대한민국 No. 1 교육 서비스 회사입니다.
fastcampus.co.kr
'코딩 > TypeORM' 카테고리의 다른 글
Methods (0) | 2024.10.15 |
---|---|
Find Options (0) | 2024.10.15 |
[Entity] Table Inheritance - 클래스 상속을 이용한 테이블 늘리기 (1) | 2024.10.11 |
사용 방법 예시들 (0) | 2024.04.22 |
entities (0) | 2024.04.22 |