OneToMany, 단방향(unidirectional relationships)
Entity간의 관계를 맺을 때에는 방향이 있다. 방향이라 하는 것은 해당 Entity가 다른 Entity를 가질 수 있는지 이다.
유저 Entity에서 책 Entity를 멤버 변수로 가지고 있다면 유저 -> 책이라는 방향성을 가진다.
이렇게 한쪽 방향만 가지는 것이 단방향(unidirectional)
책 Entity에서도 유저 Entity를 가진다면 유저 <-> 책 관계가 성립
=> 양방향(bidirectional) 관계
유저는 가지고 있는 책이 없거나 1개 이상을 소지할 수 있다. (1:N 관계)
JPA 어노테이션으로는 @OneToMany라고 표현
User.java
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Getter
@Entity
public class User {
@Id
@Column
@GeneratedValue
private Long id;
@Column(length=50, nullable= false)
private String name;
/* 한 명의 유저는 다수의 책을 가질 수 있다. */
@OneToMany
@JoinColumn(name="user_id")
private Collection<Book> book;
@Builder
public User(String name) {
this.name = name;
}
}
Book.java
@NoArgsConstructor
@Getter
@Entity
public class Book{
@Id
@Column
@GeneratedValue
private Integer id;
@Column(name="user_id")
private Long userId;
@Column
private String title;
@Column
private LocalDateTime publisedAt;
@Builder
public Book(String title, LocalDateTime publishedAt){
this.title = title;
this.publisedAt = publishedAt;
}
}
그리고 프로젝트를 실행시켜보면 아래와 같은 쿼리문이 실행된 것을 콘솔창을 통해 볼 수 있다.
user_id를 외래키로 가진다.
AnnotationException: Illegal attempt to map a non collection as a @OneToMany, @ManyToMany or @CollectionOfElements 라는 문제가 발생했는데, Collection을 사용해 타입을 매핑해주어 해결하였다.
'대외활동 기록 > NEXTERS 15th' 카테고리의 다른 글
[Spring] 자바 직렬화 Serializable (+JPA Entity) (0) | 2019.08.03 |
---|---|
[JPA] SQL Mapper와 ORM (0) | 2019.07.28 |