(JPA) 엔티티 클래스 개발 관련 이미지

(JPA) 엔티티 클래스 개발

JPA로 프로젝트를 해본적이 없어서 다음 수업을 들으면서 배운 내용을 정리하고 싶어요

더 배우거나 배우면서 더 많은 정보를 추가하는 대로 계속 업데이트하겠습니다.

관행!Spring Boot 및 JPA1 사용 – 웹 애플리케이션 개발 – 인프라 | 프레젠테이션

실용적인 예로 Spring Boot 및 JPA를 사용하여 웹 애플리케이션을 설계하고 개발합니다. 이 과정을 통해 Spring Boot와 JPA를 실제로 사용하는 방법을 배울 수 있습니다.

www.inflearn.com

도메인 모델 및 테이블 설계

엔티티 클래스 개발 관련 대표 이미지엔티티 클래스 개발 관련 이미지

아래 디자인에서 볼 수 있습니다.

1) 회원은 여러 상품을 주문할 수 있습니다.

2) 하나의 주문으로 여러 상품을 선택할 수 있습니다.

3) 제품은 공통 속성을 사용하기 때문에 상속 구조를 갖는다.

엔티티 개발

– 실제로 세터 주석은 피해야 합니다!

@Entity
@Getter@Setter
public Class Member{
	
    @Id @GeneratedValue
    @Column(name="member_id")
    private Long id;
    
    private String name;
    
    @Embedded
    private Address address;
    
    @OneToMany(mappedBy = "member")
    private List<Order> orders = new ArrayList<>();
}
@Entity
@Table(name = "orders")
@Getter @Setter
public class Order{
	
    @Id @GeneratedValue
    @Column(name = "order_id")
    private Long id;
    
    @ManyToOne(fetch = LAZY)
    @JoinColumn(name = "member_id")
    private Member member; // 연관관계의 주인
    
    @OneToMany(mappedBy = "order")
    private List<OrderItem> orderItems = new ArrayList<>();
    
    @OneToOne(fetch = LAZY)
    @JoinColumn(name = "delivery_id")
    private Delivery delivery;
    
    private LocalDateTime orderDate;
    
    @Enumerated(EnumType.STRING)
    private OrderStatus orderStatus;
}
@Embeddable
@Getter
public class Address{

    private String city;
    private String street;
    private String zipcode;
}
@Entity
@Getter @Setter
public class Delivery{

    @Id @GeneratedValue
    @Column(name = "delivery_id")
    private Long id;
    
    @OneToOne(fetch = LAZY, mappedBy = "delivery")
    private Order order;
    
    @Embedded
    private Address address;
    
    @Enumerated(EnumType.STRING)
    private DeliveryStatus status;

}
@Entity
@Getter @Setter
public class OrderItem{

    @Id @GeneratedValue
    @Column(name = "order_item_id")
    private Long id;
    
    @ManyToOne(fetch = LAZY)
    @JoinColumn(name = "item_id")
    private Item item;
    
    @ManyToOne(fetch = LAZY)
    @JoinColumn(name = "order_id")
    private Order order;
    
    private int orderPrice;
    
    private int count;
}
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DisCriminatorColumn(name = "dtype")
@Getter @Setter
public abstract class Item{
	
    @Id @GeneratedValue
    @Column(name = "item_id")
    private Long id;
    
    private String name;
    
    private int price;
    
    private String stockQuantity;
    
    @ManyToMany
    private List<Category> categories = new ArrayList<>();
    

}
@Entity
@DiscriminatorValue("A")
@Getter @Setter
public class Album extends Item{

    private String artist;
    private String etc;
}
@Entity
@DiscriminatorValue("B")
@Getter @Setter
public class Book extends Item{
	
    private String author;
    private String isbn;
}
@Entity
@DiscriminatorValue("M")
@Getter @Setter
public class Movie{
	
    private String director;
    private String actor;
	
}
@Entity
@Getter @Setter
public class Category{
    @Id @GeneratedValue
    @Column(name = "category_id")
    private Long id;
    
    private String name;
    
    @ManyToMany(fetch = LAZY)
    @JoinTable(name = "category_item",
    	joinColumns = @JoinColumn(name = "category_id"),
        inverseJoinColumns = @JoinColumn(name = "item_id")
    private List<Item> items = new ArrayList<>();
    
    @ManyToOne(fetch = LAZY)
    @JoinColumn(name = "parent_id")
    private Category parent;
    
    @OneToMany(mappedBy = "parent")
    private List<Category> child = new ArrayList<>();
}

Similar Posts

  • 2000년대 명품 브랜드 티파니의 이야기 (1)

    로고/출처: 홈페이지 2000년대 티파니의 역사에 대하여 지난 시간에는 1900년대 티파니의 역사를 돌아봤습니다. 오늘은 2000년대 티파니의 역사를 살펴보겠습니다. 특히 1900년대에 많은 일들이 시작되었다면 2000년대에는 많은 고급 제품이 출시되었습니다. 21세기에 더욱 고급스러워지는 Tiffany & Co. 무슨 일이 있었는지 보자 티파니 1837 블루 / 출처: 홈 2001 티파니 1837 블루 웰메이드 브랜드는 그들만의 특별한 로고와 컬러를 가지고 있습니다….

  • 질병분류코드D30.3방광양성종양,경계성종양진단비확인

    안녕하세요, 박소연 손해사정사입니다. 오늘은 방광 양성 신생물 질병 분류 코드인 D30.3이 경계성 종양으로 지급 가능한 사례에 대해 말씀드리겠습니다. 결론부터 들어가면 암보험금 지급은 약관을 기준으로 보험금 지급이 되므로 약관에서 말하는 암의 정의를 확인해 보면 병리 또는 진단검사의학 전문자격증을 가진 자에 의해 내려져야 하며, 이 진단은 조직검사, 미세침흡인검사 또는 혈액검사에 대한 현미경 소견에 근거한 검사결과가 필요합니다. 라고…

  • 보청기 보조금 신청 방법

    정부에서 보청기 구매에 보조금을 지급한다는 사실을 알고 계셨습니까? 보청기 구입 비용이 생각보다 부담스럽기 때문에 보청기가 필요한 분들은 이 지원 제도를 이용하시면 부담을 덜 수 있습니다. 다음은 보청기 보조금을 신청하는 방법과 보청기 보조금을 받을 자격이 있는 사람에 대한 간략한 개요입니다. 정부는 보청기에 얼마나 많은 보조금을 지급합니까? 보청기 국민보조금은 건강보험에 가입한 국민이 보청기를 구입하면 정부에서 일정 금액을…

  • 안전한 해외여행을 위해 외교부 홈페이지 바로가기

    외교부는 국민이 안전하게 해외여행을 할 수 있도록 서비스를 제공하기 위해 외교부 안전국외여행 홈페이지를 운영하고 있습니다. 외무부 안전해외여행 홈페이지에서 볼 수 있는 유용한 정보와 해당 홈페이지 바로가기 서비스를 제공하고 있습니다. 구글 검색창에 외교부 해외안전여행 검색하면 상단 URL(https://www.0404.go.kr/dev/main.mofa)이 나타나며, 접속하면 외교부 해외안전여행 홈페이지 첫 화면이 나옵니다. 안전한 해외여행을 위해 외교부 홈페이지 바로가기 외교부 해외안전여행 홈페이지 홈페이지에는 여행주의보…

  • 몽골의 자연탐방에서 잊을 수 없는 여행지 1

    #테르지트렐로 테를지는 수도인 울란바토르에서 북동쪽으로 약 80킬로미터(50마일) 떨어진 곳에 위치하고 있습니다. 몽골의 외딴 Tubu 지방에 위치한 경치 좋은 계곡입니다. 놀라운 자연이다 아름다움과 야외 레크리에이션 기회로 유명한 몽골의 인기 관광지보지 않았다. Terelj의 하이라이트 중 하나는 2932제곱킬로미터(1132마일)에 달하는 Terelj 국립공원입니다. 이곳은 시베리아 아이벡스와 눈에 잘 띄지 않는 눈표범을 포함하여 많은 희귀하고 멸종 위기에 처한 동식물 종의 서식지입니다….

  • 노인성 치매 예방 방법을 알아봅시다.

    노인성 치매 예방 방법을 알아봅시다. 안녕하세요, 어르신 돌봄 전문 기업 롱라이프 그린케어입니다.노년이 되면서 노인성 치매의 위험이 높아지고 있습니다.치매를 예방하기 위해서는 생활양식의 변화, 규칙적인 인지능력 훈련, 의학적 지원 등이 있는데 그 밖에 어떤 습관을 들여야 하는지 알아보겠습니다. 안녕하세요, 어르신 돌봄 전문 기업 롱라이프 그린케어입니다.노년이 되면서 노인성 치매의 위험이 높아지고 있습니다.치매를 예방하기 위해서는 생활양식의 변화, 규칙적인 인지능력…