Skip to content

Instantly share code, notes, and snippets.

@limejuny
Last active November 28, 2021 15:02
Show Gist options
  • Save limejuny/36ed6c5e5d9a18e9652fc3189144ef55 to your computer and use it in GitHub Desktop.
Save limejuny/36ed6c5e5d9a18e9652fc3189144ef55 to your computer and use it in GitHub Desktop.
양방향 연관관계

Member와 Order는 1:N 관계

// Member
@Entity
@Getter @Setter
public class Member {
  @Id @GeneratedValue
  @Colume(name = "member_id")
  private Long id;
  
  private String name;
  
  @Embedded
  private Address address;
  
  @OneToMany(mappedBy = "member") // Order 테이블에 있는 member 필드에 의해서 mapping 되었다는 뜻, 읽기 전용이 됨
  private List<Order> orders = new ArrayList<>();
}
// Order
@Entity
@Table(name = "orders")
@Getter @Setter
public class Order {
  @Id @GeneratedValue
  @Colume(name = "order_id")
  private Long id;
  
  @ManyToOne
  @JoinColumn(name = "member_id") // foreign key 이름이 member_id
  private Member member;
  
  private List<OrderItem> orderItems = new ArrayList<>();
  
  private Delivery delivery;
  
  private LocalDateTime orderDate; // 주문시간
  
  private OrderStatus status; // 주문상태 [ORDER, CANCEL]
}
// OrderStatus
public enum OrderStatus {
  ORDER, CANCEL
}

테이블 상속

  • @Interitance(strategy = InheritanceType.SINGLE_TABLE)
  • SINGLE_TABLE: 테이블 하나에 넣음
    • 상속 받은 클래스에서 @DiscriminatorValue("B") 처럼 테이블 명 지정
  • TABLE_PER_CLASS: 클래스별로 테이블이 나옴
  • JOINED: 가장 정규화된 스타일

Enum 타입

  • @Enumerated(EnumType.STRING)
  • ORDINAL은 1, 2, 3 숫자로 나옴-> 중간에 수정되면 숫자가 밀리기 때문에 절대 사용 금지

다대다 관계

@ManyToMany
@JoinTable(name = "category_item", // 중간 테이블 지정
  joinColumns = @JoinColumn(name = "category_id"), // 중간 테이블에 있는 키
  inverseJoinColumns = @JoinColumn(name = "item_id") // category_item에 아이템 쪽
) // Category 테이블

자기참조

public class Category {
  @ManyToOne
  @JoinColumn(name = "parent_id")
  private Category parent;
  
  @OneToMany(mappedBy = "parent")
  private List<Category> child = new ArrayList<>();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment