Mini

엔티티 클래스 개발1 // JPA 어노테이션 본문

Java/Spring-app

엔티티 클래스 개발1 // JPA 어노테이션

Mini_96 2023. 6. 6. 18:27

테이블, 기본키, 기본키자동생성

@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(배송중)
}