반응형
250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- 자바스크립트
- c#
- 객체리터럴
- slice
- 이벤트리스너
- 제로초
- 인프런무료강좌
- 인프런강좌
- 고차함수
- 인터넷프로토콜
- 자바스크립트틱택토
- 인프런강의
- 틱택토구현
- 콜백함수
- EntityFramework
- Blazor
- 자바스크립트함수
- 인프런자바스크립트
- 비주얼스튜디오
- 자바스크립트객체리터럴
- sort
- HTTP
- .NET
- 인프런
- 객체의비교
- 인프런인강
- 자바스크립트recude
- NPM
- 코딩
- 자바스크립트파라미터
Archives
- Today
- Total
샐님은 개발중
#4. 연관 관계 매핑 본문
728x90
반응형
연관관계 매핑 종류
1. 일대일 : @OneToOne
2. 일대다 : @OneToMany
3. 다대일 : @ManyToOne
4. 다대다 : @ManyToMany
1. 일대일 단반향 매핑
장바구니 -회원 엔티티 관계는 장바구니가 일대일로 회원을 매핑한다.
1) Cart 엔티티 생성
package won.shop.domain;
import jakarta.persistence.*;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
@Entity
public class Cart {
@Id
@GeneratedValue
@Column(name="cart_id")
private long id;
@OneToOne
@JoinColumn(name="member_id") // name 에는 조인할 외래키를 입력
private Member member;
}
Member 엔티티에는 cart를 참조하지 않으므로 cart의 일방적으로 회원 엔티티를 참조하는 일대일 단반향 매핑.
2) CartRepository 생성
package won.shop.Repository;
import org.springframework.data.jpa.repository.JpaRepository;
import won.shop.domain.Cart;
public interface CartRepositroy extends JpaRepository<Cart,Long> {
}
2. 다대일 단반향 매핑
- 하나의 장바구니에 여러 상품이 들어갈수 있다. 또한 같은 상품을 여러개 주문가능하다.
1) cart_tem 엔티티 생성
package won.shop.domain;
import jakarta.persistence.*;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
@Entity
public class Cart_item {
@Id
@GeneratedValue
@Column(name="cart_item_id")
private Long id;
@ManyToOne
@JoinColumn(name="cart_id") // 다대일 단방향 매핑
private Cart cart;
@OneToOne
@JoinColumn(name="item_id")
private Item item;
private int count;
}
3. 다대일/일대다 양방향 매핑
- 양반향 매핑이란 단방향 매핑이 2개 있다고 생각하면 된다.
* 주문 - 주문 상품
1) 주문 엔티티 생성
package won.shop.domain;
import jakarta.persistence.*;
import lombok.Getter;
import lombok.Setter;
import org.thymeleaf.extras.springsecurity6.util.SpringSecurityContextUtils;
import won.shop.constant.OrderStatus;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
@Getter
@Setter
@Entity
@Table(name="orders")
public class Order {
@Id
@GeneratedValue
@Column(name="order_id")
private Long id;
@ManyToOne
@JoinColumn(name="member_id")
private Member member;
@OneToMany(mappedBy = "order")// 연관관계주인은 orderitem 엔티티이고 mappedBy="order" 인 이유는 OrderItem 에 있는 Order 필드가 연관 주인으로 설정되어있기 때문
private List<OrderItem> orderItems = new ArrayList<>();
private LocalDateTime orderDate;
private OrderStatus orderStatus;
private LocalDateTime regTime;
private LocalDateTime updateTime;
}
2) 주문상품 엔티티 생성
package won.shop.domain;
import jakarta.persistence.*;
import lombok.Getter;
import lombok.Setter;
import java.time.LocalDateTime;
@Getter
@Setter
@Entity
public class OrderItem {
@Id
@GeneratedValue
@Column(name="order_item_id")
private Long id;
@OneToOne
@JoinColumn(name="item_id")
private Item item;
@ManyToOne
@JoinColumn(name="order_id")
private Order order;
private int orderPrice;
private int count;
private LocalDateTime regTime;
private LocalDateTime updateTime;
}
728x90
반응형
'포토폴리오 > Spring-Boot,JPA - 쇼핑몰사이트 v2' 카테고리의 다른 글
#6. 고아 객체 제거 와 지연 로딩 (0) | 2023.08.04 |
---|---|
#5. 영속성 전이 (0) | 2023.08.04 |
#3. 스프링 시큐리티를 활용한 로그인/회원가입 (2) (0) | 2023.08.03 |
#2. 스프링 시큐리티를 활용한 로그인/회원가입 (1) (0) | 2023.08.03 |
#0. 쇼핑몰 프로젝트 생성 (0) | 2023.08.02 |