step 1
책 재고가 부족하여 다음주에 책들이 새롭게 들어오기로 했습니다.
책을 서점에 등록하려고 합니다. 책(Book) 과 서점(BookStore)의 연관관계를 맺어보세요!
[요구사항]
- 다대일 단방향 연관관계를 적용해주세요.
ERD
SQL
create table book (
id bigint generated by default as identity,
author varchar(255) not null,
name varchar(255) not null,
price integer not null,
quantity bigint not null,
book_store_id bigint,
primary key (id)
)
create table book_store (
id bigint generated by default as identity,
location varchar(255) not null,
name varchar(255) not null,
primary key (id)
)
alter table if exists book
add constraint FK93giw6493l79g47q3nr7asvo1
foreign key (book_store_id)
references book_store
step1 다대일 단방향 연관관계
bookstore ← book
Book
package com.example.jpa_relation_test.entity;
import lombok.Getter;
import lombok.NoArgsConstructor;
import javax.persistence.*;
@Entity
@Getter
@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 long quantity;
@ManyToOne
@JoinColumn(name = "BookStore_id", nullable = false)
private BookStore bookStore;
public void setBookStore(BookStore bookStore) {
this.bookStore = bookStore;
}
}
BookStore
package com.example.jpa_relation_test.entity;
import lombok.Getter;
import lombok.NoArgsConstructor;
import javax.persistence.*;
@NoArgsConstructor
@Getter
@Entity
public class BookStore {
@Id
@Column(name = "BOOK_ID")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String location;
private String name;
}
step2 다대일 양뱡향 연관관계
bookstore ↔ book
Book
package com.example.jpa_relation_test.entity;
import lombok.Getter;
import lombok.NoArgsConstructor;
import javax.persistence.*;
import java.util.ArrayList;
import java.util.List;
@Entity
@Getter
@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 long quantity;
@OneToMany(mappedBy = "book", fetch = FetchType.EAGER)
private List<BookStore> bookStore = new ArrayList<>();
public Book(Long bookId) {
this.id = bookId;
}
}
BookStore
package com.example.jpa_relation_test.entity;
import lombok.Getter;
import lombok.NoArgsConstructor;
import javax.persistence.*;
import java.util.ArrayList;
import java.util.List;
@NoArgsConstructor
@Getter
@Entity
public class BookStore {
@Id
//@Column(name = "BOOK_ID")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String location;
private String name;
@ManyToOne
@JoinColumn(name = "BOOK_ID")
private Book book;
public BookStore(String location, String name){
this.location = location;
this.name = name;
}
}
step3 일대다 단방향 연관관계
Member <- bookstore ↔ book
Book
package com.example.jpa_relation_test.entity;
import lombok.Getter;
import lombok.NoArgsConstructor;
import javax.persistence.*;
@Entity
@Getter
@NoArgsConstructor
public class Book {
@Id
@Column(name = "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 long quantity;
@ManyToOne
@JoinColumn(name = "BookStore_id", nullable = false)
private BookStore bookStore;
public void setBookStore(BookStore bookStore) {
this.bookStore = bookStore;
}
}
BookStore
package com.example.jpa_relation_test.entity;
import lombok.Getter;
import lombok.NoArgsConstructor;
import javax.persistence.*;
import java.util.ArrayList;
import java.util.List;
@NoArgsConstructor
@Getter
@Entity
public class BookStore {
@Id
//@Column(name = "BOOK_ID")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String location;
private String name;
@OneToMany
@JoinColumn(name = "Book_id")
private List<Book> book = new ArrayList<>();
}
step4 다대다를 사용하지 말고 구현하기!
book ↔ Purchase ↔ Member <- bookstore ↔ book
Book
package com.example.jpa_relation_test.entity;
import lombok.Getter;
import lombok.NoArgsConstructor;
import javax.persistence.*;
import java.util.ArrayList;
import java.util.List;
@Entity
@Getter
@NoArgsConstructor
public class Book {
@Id
@Column(name = "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 long quantity;
@OneToMany
@JoinColumn(name = "Book_id")
private List<Book> bookStore = new ArrayList<>();
}
Member
package com.example.jpa_relation_test.entity;
import javax.persistence.*;
import java.util.ArrayList;
import java.util.List;
@Entity
public class Member {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@OneToMany
@JoinColumn(name = "Purchase_id")
private List<Purchase> purchase = new ArrayList<>();
@ManyToOne
@JoinColumn(name = "Bookstore_id", nullable = false)
private BookStore bookStore;
}
Purchase
package com.example.jpa_relation_test.entity;
import javax.persistence.*;
import java.util.ArrayList;
import java.util.List;
@Entity
public class Purchase {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@OneToMany
@JoinColumn(name = "Book_id")
private List<Book> book = new ArrayList<>();
@ManyToOne
@JoinColumn(name = "Member_id", nullable = false)
private Member member;
}
'과제 > 과제' 카테고리의 다른 글
항해99 주특기 입문 과제 (JAVA) 2. 나만의 블로그 만들기 (3) Appliction (0) | 2023.02.08 |
---|---|
항해99 주특기 입문 과제 (JAVA) 3. 제출!! (0) | 2023.02.07 |
항해99 주특기 입문 과제 (JAVA) 2. 나만의 블로그 만들기 (2) dto (0) | 2023.02.07 |
항해99 주특기 입문 과제 (JAVA) 2. 나만의 블로그 만들기 (2) 서버 연결 (0) | 2023.02.07 |
항해99 주특기 입문 과제 (JAVA) 2. 나만의 블로그 만들기 (1) 기초 틀 만들기 (0) | 2023.02.07 |