JPA에서 중요한 것은 "객채와 관계형 데이터베이스 테이블이 어떻게 매핑되는지를 이해하는 것"이라고 할 수 있다.JPA의 목적인 "객체 지향 프로그래밍과 데이터베이스 사이의 패러다임 불일치를 해결"이라는 것과 가장 직접적으로 연관되어 있기 때문이다. JPA에서는 두 엔티티 사이의 연관 관계를 정의할 때 기본적으로 단방향으로 정의한다. 이로 인해 DB 테이블에서 외래키를 기준으로 하여 조인한다. 두 테이블 간의 연관된 데이터를 조회할 수 있는 것과 달리 JPA에서 단방향 연관 관계가 정의된 상태에서는 한쪽 엔티티 객체는 연관 관계인 엔티티 객체를 조회할 수 있으나, 반대쪽 엔티티 객체는 어떤 엔티티 객체와 연관 관계를 갖는지 알 수 없다. 이로 인해 JPA에서는 비즈니스 로직, 비즈니스 요구사항 등 필요..
PK를 나타내기 위해 @Id 를 사용하고, 생성 전략을 정의하기 위해 @GeneratedValue 를 사용한다.이 두 개의 어노테이션을 가지고 기본키 생성 전략을 알아보고자 한다. @Id엔티티 클래스에서 해당 필드가 데이터베이스의 기본 키 역할을 한다는 것을 명시한다.이 어노테이션이 지정된 필드는 엔티티의 고유 식별자로 사용되며, 데이터베이스에서 레코드를 고유하게 식별하는 데 사용된다public class Member { @Id @Column(name = "member_id") // 컬럼명 따로 지정 private Long id;}@Column 을 활용하여 테이블의 PK 컬럼을 따로 지정할 수도 있다. 이때, 컬럼명을 따로 지정하지 않으면, 관례에 따라 매핑되는 테이블 컬럼명은 camelC..
package jpabook.jpashop.api; import jpabook.jpashop.domain.Address; import jpabook.jpashop.domain.Order; import jpabook.jpashop.domain.OrderStatus; import jpabook.jpashop.repository.*; import lombok.Data; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import java.time.LocalDateTime; ..
소개 API 개발 고급 전반을 소개 조회용 샘플 데이터 입력 API 개발 고급 설명을 위해 샘플 데이터를 입력하자. userA JPA1 BOOK JPA2 BOOK userB SPRING1 BOOK SPRING2 BOOK package jpabook.jpashop; import jakarta.annotation.PostConstruct; import jakarta.persistence.EntityManager; import jpabook.jpashop.domain.*; import jpabook.jpashop.domain.item.Book; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; impor..
회원 등록 API package jpabook.jpashop.api; import jakarta.validation.Valid; import jpabook.jpashop.domain.Member; import jpabook.jpashop.service.MemberService; import lombok.AllArgsConstructor; import lombok.Data; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; import java.util.List; import java.util.stream.Co..
웹 계층 개발 홈 화면 회원 기능 회원 등록 회원 조회 상품기능 상품 등록 상품 수정 상품 조회 주문 기능 상품 주문 주문 내역 조회 주문 취소 상품 등록 상품 목록 상품 수정 변경 감지와 병합 상품 주문 홈 화면과 레이아웃 홈 컨트롤러 등록 package jpabook.jpashop.controller; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @Controller @Slf4j public class HomeController { @RequestMapping("/") //첫번째 화면 ..
구현 기능 상품 주문 주문 내역 조회 주문 취소 순서 주문 엔티티, 주문상품 엔티티 개발 주문 리포지토리 개발 주문 서비스 개발 주문 검색 기능 개발 주문 기능 테스트 주문, 주문상품 엔티티 개발 domain/Order에 다음 코드 추가 //==생성 메서드==// public static Order createOrder(Member member, Delivery delivery, OrderItem... orderItems) { Order order = new Order(); order.setMember(member); order.setDelivery(delivery); for (OrderItem orderItem : orderItems) { order.addOrderItem(orderItem); } or..
상품 엔티티 개발(비즈니스 로직 추가) 구현 기능 상품 등록 상품 목록 조회 상품 수정 순서 상품 엔티티 개발(비즈니스 로직 추가) 상품 리포지토리 개발 상품 서비스 개발 상품 기능 테스트 domain/item/item에 다음 코드 추가 //==비즈니스 로직==// /** * stock(재고) 증가 */ public void addStock(int quantity){ this.stockQuantity += quantity; } /** * stock(재고) 감소 */ public void removeStock(int quantity){ int restStock = this.stockQuantity - quantity; if (restStock < 0) { throw new NotEnoughStockExce..