create table member (id bigint not null, address varchar(255) not null, age integer not null, description varchar(255), name varchar(30) not null, nickName varchar(30) not null, primary key (id))
create table orders (id varchar(255) not null, memo clob, order_datetime TIMESTAMP, orderStatus varchar(255), member_id bigint, primary key (id))
## 외래키를 통해 관계를 맺는다.
alter table orders
add constraint fk_order_member_id foreign key (member_id) references member
@Entity
@Table(name = "orders")
@Getter
@Setter
public class Order {
@Id
@Column(name = "id")
private String uuid;
@Column(name = "order_datetime", columnDefinition = "TIMESTAMP")
private LocalDateTime orderDatetime;
@Enumerated(EnumType.STRING)
private OrderStatus orderStatus;
@Lob
private String memo;
//private Long memberId;
@ManyToOne
private Member member; // 참조를 통해서 관계를 맺는다.
}
class Member {
private long id;
private List<Order> orders; // 회원 -> 주문
}
class Order {
private String id;
}
Member member = new Member();
Order order = meber.getOrders().get(0); // 회원 -> 주문에 참조가 가능하다.
order.getMember() // (X)
회원 → 주문 참조가 가능한 단방향 매핑
class Member {
private long id;
}
class Order {
private String id;
private Member member; // 주문 -> 회원
}
Order order = new Order();
Member member = order.getMember(); // 주문 -> 회원에 참조가 가능하다.
member.getOrders() // (X)
주문 → 회원 참조가 가능한 단방향 매핑
class Member {
private long id;
private List<Order> orders; // 회원 -> 주문
}
class Order {
private String id;
private Member member; // 주문 -> 회원
}
Member member = new Member();
Order order = member.getOrders().get(0); // 회원 -> 주문 참조 (O)
order.getMember(); // 주문 -> 회원 참조 (O)
회원 → 주문, 주문 → 회원 모두 참조가 가능한 양방향 매핑
SELECT * FROM member AS m JOIN orders AS o
ON m.id = o.member_id;
SELECT * FROM orders AS o JOIN member AS m
ON o.member_id = m.id
테이블은 외래키를 이용해서 양방향으로 조인이 가능하다.
class Member {
private long id;
private List<Order> orders;
}
class Order {
private String id;
private Member member;
}
...
@Test
void graph() {
Member member1 = new Mebmer(1);
Order order1 = new Order(1)
member1.setOrders(Lists.newArrayList(order1));
Order findOrder= member1.getOrders().get(o); // 객체 그래프 탐색이라 한다.
findOrder.getMember();
}