@Entity
public class Member {
@Id
@GeneratedValue
@Column(name = "MEMBER_ID")
private Long id;
private String name;
///////////////////////////////// 핵심 코드(다대일 단방향)
@ManyToOne
@JoinColumn(name = "TEAM_ID")
private Team team;
/////////////////////////////////
}
@Entity
public class Team {
@Id
@GeneratedValue
@Column(name = "TEAM_ID")
private Long id;
private String name;
///////////////////////////////// 핵심 코드(다대일 양방향)
@OneToMany(mappedBy = "team")
private List<Member> members = new ArrayList<>();
/////////////////////////////////
}
UPDATE SQL
문이 실행됨@Entity
public class Team {
@Id
@GeneratedValue
@Column(name = "TEAM_ID")
private Long id;
private String name;
/////////////////////////////////
@OneToMany
@JoinColumn(name = "team")
private List<Member> members = new ArrayList<>();
/////////////////////////////////
}
실행 결과
Hibernate:
/* insert for
org.example.Member */insert
into
Member (name, team_TEAM_ID, MEMBER_ID)
values
(?, ?, ?)
Hibernate:
/* insert for
org.example.Team */insert
into
Team (name, TEAM_ID)
values
(?, ?)
Hibernate:
update
Member
set
team=?
where
MEMBER_ID=?
@ManyToMany
어노테이션 사용@JoinTable
로 연결 테이블 지정@ManyToMany → @OneToMany, @ManyToOne
@Entity
public class Category {
@Id @GeneratedValue
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<>();
////////////////////////////////////////////////////
//////////////////////////////////////////////////// 카테고리
@ManyToOne
@JoinColumn(name = "PARENT_ID")
private Category parent;
@OneToMany(mappedBy = "parent")
private List<Category> child = new ArrayList<>();
////////////////////////////////////////////////////
}
@Entity
public 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> categories = new ArrayList<>();
////////////////////////////////////////////////////
}
@Entity
@Table(name = "ORDERS")
public class Order {
@Id @GeneratedValue
@Column(name = "ORDER_ID")
private Long id;
@ManyToOne
@JoinColumn(name = "MEMBER_ID")
private Member member;
////////////////////////////////////////////////////
@OneToOne // 외래 키를 Order가 소유
@JoinColumn(name = "DELIVERY_ID")
private Delivery delivery;
////////////////////////////////////////////////////
private LocalDateTime orderDate;
@Enumerated(EnumType.STRING)
private OrderStatus status;
@OneToMany(mappedBy = "order")
private List<OrderItem> orderItems = new ArrayList<>();
public void addOrderItem(OrderItem orderItem) {
orderItems.add(orderItem);
orderItem.setOrder(this);
}
}
@Entity
public class Delivery {
@Id @GeneratedValue
private Long id;
////////////////////////////////////////////////////
@OneToOne(mappedBy = "delivery")
private Order order;
////////////////////////////////////////////////////
private String city;
private String street;
private String zipcode;
private DeliveryStatus status;
}