✏️ 주특기 숙련주차(Spring) 문제
서점 서비스를 구현해 볼까요?
항해서점이 제주도에 분점을 냈습니다.
(서점(BookStore) , 책(Book) , 회원(Member), 구매(Purchase) Entity 가 있습니다.)
[공통 요구사항]
ERD, SQL을 참고하여 구현해 주세요.(컬럼 명은 자유롭게 하셔도 좋습니다.) nullable 등의 세부조건은 실제 서비스를 구현한다고 생각하시고 서비스 관점에서 자유롭게 하셔도 좋습니다.
📍 Exam 1.
책 재고가 부족하여 다음주에 책들이 새롭게 들어오기로 했습니다.
책을 서점에 등록하려고 합니다. 책(Book) 과 서점(BookStore)의 연관관계를 맺어보세요!
[요구사항]
다대일 단방향 연관관계를 적용해주세요.
[ERD]
[수행 코드]
- BookStore ⬅️ Book 테이블에 다대일 단방향 연관관계를 적용한다.
- Book Entity에 @ManyToOne 어노테이션을 이용해서 작성한다.
@Getter
@Entity(name="Book")
@NoArgsConstructor
public class Book {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false)
private String author;
@Column(nullable = false)
private String name;
@Column(nullable = false)
private int price;
@Column(nullable = false)
private int quantity;
@ManyToOne
@JoinColumn(name = "BOOKSTORE_ID", nullable = false)
private BookStore bookStore;
}
이 부분을 정리하다가 추가적으로 알게 된 점이 있다.
@JoinColumn 조인컬럼에 대한 이야기인데 조인 컬럼은 외래키를 매핑할 때 사용하고, Name속성에는 매핑할 외래키 이름을 지정한다.
근데 ! 이 어노테이션은 생략 할 수 있다는 점이다.
@JoinColumn: 조인 컬럼은 외래 키를 매핑할 때 사용한다. name 속성에는 매핑할 외래 키 이름을 지정한다. 회원과 팀 테이블은 TEAM_ID 외래 키로 연관관계를 맺으므로 이 값을 지정하면 된다. 이 어노테이션은 생략할 수 있다.
그래서 테스트를 해보았다. JoinColumn이 있을때와 없을때 차이가 있는지 ‼️
놀랍게도 아무런 차이가 없었다 .. ! @JoinColumn은 엔티티간 조인과는 관계없이 외래키 이름 지정을 위해서만 사용하는 것인데
생략이 될 경우 알아서 @ManyToOne의 대상이 되는 엔티티의 이름_id를 대상으로 삼는 것 같다.
오늘도 또 하나 알아버렸다 ~~ 😎
📍 Exam 2.
서점(BookStore)에서 책(Book)을 관리하려고 하는데 현재 구조로는 개발 하기가 불편하네요.
연관관계를 수정해 보세요!
[요구사항]
다대일 양방향 연관관계를 적용해주세요.
[ERD]
[수행 코드]
- BookStore ➡️ Book 테이블에 일대다 관계를 추가로 설정하여 양방향 관계를 적용한다.
- BookStore Entity에 @OneToMany 어노테이션을 이용해서 작성한다.
✨ 여기서 mappedBy를 사용하는데 이 부분은 연관관계의 주인을 지정해줘 ~ 라는 말과 같다.
: 주인이라하면 약간 아리송한데 두개의 테이블 중 외래키를 관리(등록, 수정)할 대장을 지정해주면 된다.!
: 주인이 아닌쪽은 읽기만 가능!
📍 Exam 3.
항해서점 제주점이 드디어 회원제를 적용하기로 했습니다.
서점(BookStore)에서 회원(Member)을 관리할 수 있도록 연관관계를 맺어보세요!
[요구사항]
일대다 단방향 연관관계를 적용해주세요.
[ERD]
[수행 코드]
- BookStore ➡️ Member 테이블에 일대다 관계를 설정하여 양방향 관계를 적용한다.
- BookStore Entity에 @OneToMany 어노테이션을 추가하여 작성한다.
*) 관계가 헷갈릴 때 = 만약 OneToMany(1:n) 이라면 1인쪽 엔티티에서 추가 하면 된다
: ex ) 서점이 1일때 n개의 멤버가 존재 할 수 있다.
📍 Exam 4.
항해서점 제주점에서 회원(Member)이 구매한 책(Book)을 관리하려고 합니다.
회원(Member)과 책(Book)의 연관관계를 맺어보세요!
[요구사항]
다대다를 사용하지 말고 구현해 보세요.
구매(Purchase) Entity를 사용하세요.
* 이거 약간 서브웨이 색 같다 ㅋ
[ERD]
[수행 코드]
- Book ➡️ Purchase , Member ➡️ Purchase 테이블에 일대다 관계를 설정한다. (@OneToMany)
- Purchase ➡️ Book, Member ➡️ Book 테이블의 다대일 관계를 설정하여 양방향 관계를 적용한다. (@ManyToOne)
- BookStore Entity에 @OneToMany 어노테이션을 추가하여 작성한다.
'⛴ 항해' 카테고리의 다른 글
[항해99. 4주차 - WIL] (0) | 2022.12.11 |
---|---|
*. 오늘의 요약 (2) | 2022.12.09 |
[항해99] 주특기 숙련 주차 Spring 과제 진행결과 보고의 건 (0) | 2022.12.08 |
[항해99. 3주차 - WIL] (1) | 2022.12.05 |
[항해99] 주특기 입문 주차 Spring 과제 진행결과 보고의 건 (0) | 2022.11.30 |