테이블, 기본키, 기본키자동생성
@Entity @Id @GeneraedValue
@Entity //Member 테이블 만들어줘.
public class Member {
@Id //Long id를 키로 해줘.
@GeneratedValue //기본키 자동으로 생성해줘(1씩증가)
private Long id;
private String name;
private Address address;
}
@Embeddable
package jpabook.jpashop.domain;
import lombok.Getter;
import javax.persistence.Embeddable;
@Embeddable //내장가능
@Getter
public class Address {
private String city;
private String street;
private String zipcode;
}
테이블명설정, 컬럼명설정, 다대일, 매핑컬럼설정
@Table @Column @ManyToOne @JoinColumn
package jpabook.jpashop.domain;
import lombok.Getter;
import lombok.Setter;
import javax.persistence.*;
@Entity
@Table(name="orders") //테이블이름 이걸로해줘 (기본값:클래스명)
@Getter @Setter
public class Order {
@Id @GeneratedValue
@Column(name="order_id")
private Long id;
@ManyToOne //Order클래스입장에서 맴버는 1개임. Order(Many) : member(One)
@JoinColumn(name="member_id") //조인(매핑) 이걸로해줘
private Member member;
}
* 다대일, 연관관계주인-거울 설정
@OneToMany(mappedBy)
1.주인 : JoinColum(name=거울.id)
class order{
@OneToOne
@JoinColumn(name="delivery_id")
private Delivery delivery;
2.거울 : OneToOne(mappedBy="주인.변수명")
public class Delivery {
@Id
@GeneratedValue
@Column(name="delivery_id")
private Long id;
@OneToOne(mappedBy = "delivery")
private Order order;
* 다대다, 연관관계주인-거울 설정
1.주인 : @JoinTable()
public class Category {
@Id
@GeneratedValue
@Column(name="category_id")
private Long id;
private String name;
@ManyToMany
@JoinTable(name="category_item",
joinColumns = @JoinColumn(name = category_id),
inverseJoinColumns = @JoinColumn(name = "item_id")) //다대다는 중간테이블필요.
private List<Item> items=new ArrayList<>()
}
2.거울
public abstract class Item {
@Id
@GeneratedValue
@Column(name="item_id")
private Long id;
private String name;
private int price;
private int stockQuantity;
@ManyToMany(mappedBy = "items")
private List<Category> categoryies = new ArrayList<>();
}
*상속관계 구현
1.부모
package jpabook.jpashop.domain.item;
import lombok.Getter;
import lombok.Setter;
import javax.persistence.*;
@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 int stockQuantity;
}
2.자식
package jpabook.jpashop.domain.item;
import lombok.Getter;
import lombok.Setter;
import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;
@Entity
@DiscriminatorValue("B") //한테이블 전략(-) 구분X -> Discriminator로 구분
@Getter
@Setter
public class Book extends Item{
private String author;
private String isbn;
}
* 자신타입 부모,자식 구현
class Category{
//부모는 나랑같은타입, 1개
@ManyToOne
@JoinColumn(name="parent_id")
private Category parent;
//자식은 여러개가능
@OneToMany(mappedBy = "parent")
private List<Category> child=new ArrayList<>();
* Enum 사용자 구현
@Enumerated
※ 주의 : EnumType.ORDINAL 하면 망함
0,1,2 로저장 => 중간에 추가시 밀림현상
해결: .STRING
package jpabook.jpashop.domain;
import lombok.Getter;
import lombok.Setter;
import javax.persistence.*;
@Entity
@Getter
@Setter
public class Delivery {
@Id
@GeneratedValue
@Column(name="delivery_id")
private Long id;
private Order order;
@Embedded
private Address address;
@Enumerated(EnumType.STRING)
private DeliveryStatus status; //READY, COMP(배송중)
}
'Java > Spring-app' 카테고리의 다른 글
회원 기능 테스트 (0) | 2023.06.07 |
---|---|
회원 서비스 개발 //의존관계주입, @Transactional(readOnly) (1) | 2023.06.06 |
회원 리포지토리 개발 (0) | 2023.06.06 |
엔티티 설계시 주의점 // Setter제거 (0) | 2023.06.06 |
JPA 실전편 환경설정 // 문제-해결 중심으로 복습 (0) | 2023.06.05 |