JPA 연관관계
👉 연관관계
Aa 관계 | 코드 선언 | Entity | 예 |
다대일(N:1) | @OneToMany | Order(1) : Food(N) | 배달 주문 1개에 음식 여러개 선택 가능 |
다대일(N:1) | @ManyToOne | Owner(N) : Restraunt(1) | 음식점 주인 여러명이 하나의 음식점을 소유 가능 |
일대일(1:1) | @OneToOne | Order(1) : Coupon(1) | 배달 주문 1개 주문 시, 쿠폰 1개만 할인 적용 가능 |
다대다(N:N) | @ManyToMany | User(N) : Restraunt(N) | 고객은 음식점 여러개 찜 가능 음식점은 고객 여러명에서 찜 가능 |
# Member Entity
@Getter
@Entity
@NoArgsConstructor
public class Member {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false)
private String memberName;
@OneToMany(mappedBy = "member", fetch = FetchType.EAGER) // 연관관계 주인에 mappedBy 설정
private List<Orders> orders = new ArrayList<>(); // 한명의 멤버는 여러개 음식의 주문을 할 수 있다.
public Member(String memberName) { // 생성자 추가
this.memberName = memberName;
}
}
# Food Entity
@Getter
@Entity
@NoArgsConstructor
public class Food {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false)
private String foodName;
@Column(nullable = false)
private int price;
@OneToMany(mappedBy = "food",fetch = FetchType.EAGER) // 연관관계 주인에 mappedBy 설정
private List<Orders> orders = new ArrayList<>(); // 한개의 음식은 여러개의 주문에 포함 될 수 있다.
public Food(String foodName, int price) { // 생성자 추가
this.foodName = foodName;
this.price = price;
}
}
# Orders Entity
@Getter
@Entity
@NoArgsConstructor
public class Orders {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne
@JoinColumn(name = "food_id") // Food id를 멤버로 추가
private Food food;
@ManyToOne
@JoinColumn(name = "member_id") // Member의 id를 멤버로 추가
private Member member;
public Orders(Food food, Member member) { // 생성자 추가
this.food = food;
this.member = member;
}
}
# Spring Data JPA 추가기능 구현방법
https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-methods
🙋♂️ 소감 :
연관관계가 너무 헤깔려서 이전 강의를 다시 보고 정리를 하였다.
다대일 단방향으로 만들려면 데이터베이스는 무조건 다(N)쪽이 외래 키를 갖고,
다대일 양방향으로 만들려면 일(1)쪽에 @OneToMany를 추가하고 mappedBy로 연관 관계의 주인을 지정해줘야한다.
무에서는 일대다(1:N) 단방향은 거의 쓰지않는다.
😈 아는 내용이라고 그냥 넘어가지 않기! 😈
'❤️🔥TIL (Today I Learned)' 카테고리의 다른 글
[TIL] 2022-12-27(42day) (0) | 2022.12.28 |
---|---|
[TIL] 2022-12-26(41day) (0) | 2022.12.27 |
[TIL] 2022-12-22(39day) (0) | 2022.12.22 |
[TIL] 2022-12-21(38day) (0) | 2022.12.21 |
[TIL] 2022-12-20(37day) (0) | 2022.12.20 |
댓글