우리가 JPA 를 사용을 하다보면 단순한 매핑이 아니라
여러가지 다대다 매핑 이라던지 아니면 일대일 매핑을 하기 위해서
복잡한 관계를 맺기 시작한다
이번에 알아보는 것은 1 : N 매핑 관계이다
Jpa Entity 를 만들다 보면 하나의 엔티티만 만드는게 아니다
연관관계의 맺는 부분이 있을 것이다
아래의 형태로 매핑할 것이다
@Getter
@Entity
@Table(name = "CATEGORY")
@NoArgsConstructor
public class Category extends BaseEntity{
private String title;
@OrderBy("createDate asc , title desc ")
@OneToMany(mappedBy = "category")
private List<Post> posts;
@Builder
public Category(String title, List<Post> posts) {
this.title = title;
this.posts = posts;
}
}
@OrderBy
의 경우 엔티티 안에서 불러올 때 따로 order by 절을 작성해주는 어노테이션이다.
@OneToMany
의 경우 1 : N 메핑을 하기 위해서 사용을 한다.
@OneToMany
속성중mappedBy
는 메핑된 변수 명을 작성을 해준다.
@Getter
@Entity
@Table(name = "Post")
@NoArgsConstructor
public class Post extends BaseEntity {
private String title;
private String content;
@JsonIgnore
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "category_id")
private Category category;
@Builder
public Post(String title, String content, Category category) {
this.title = title;
this.content = content;
this.category = category;
}
}
@JsonIgnore
의 경우 양뱡향성 작성시 무한으로 loop 되는 것을 막아준다
@ManyToOne
의 경우 자식 입장의 N : 1 메핑을 해준다.
@JoinColumn
의 경우 메핑될 컬럼 명을 작성해준다.
실제 쿼리를 날렸을 시 위와 같이 날라간다.