drop table if exists member CASCADE
drop sequence if exists hibernate_sequence
create sequence hibernate_sequence start with 1 increment by 1
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))
alter table member add constraint UK_1m3ighjll05v7njjxeopp823j unique (nickName)
@Id
@Column(name = "id")
private Long id;
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private Long id;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Id
@GeneratedValue
private Long id;
create sequence hibernate_sequence start with 1 increment by 1
create table item (id bigint not null, price integer not null, stockQuantity integer not null, primary key (id))
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 order_item (id bigint not null, item_id bigint, order_id varchar(255), price integer not null, quantity integer not null, primary key (id))
create table orders (id varchar(255) not null, member_id bigint, memo clob, order_datetime TIMESTAMP, orderStatus varchar(255), primary key (id))
alter table member add constraint UK_1m3ighjll05v7njjxeopp823j unique (nickName)
@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;
@Column(name = "member_id") // fk
private Long memberId;
}
Order Entity
@Entity
@Table(name = "order_item")
@Getter
@Setter
public class OrderItem {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private Long id;
private int price;
private int quantity;
@Column(name = "order_id") // fk
private String order_id;
@Column(name = "item_id") // fk
private Long item_id;
}
OrderItem Entity
@Entity
@Table(name = "item")
@Getter
@Setter
public class Item {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private Long id;
private int price;
private int stockQuantity;
}
Item Entity
@Test
void 잘못된_설계() {
Member member = new Member();
member.setName("kanghonggu");
member.setAddress("서울시 동작구(만) 움직이면 쏜다.");
member.setAge(33);
member.setNickName("guppy.kang");
member.setDescription("백앤드 개발자에요.");
EntityManager entityManager = emf.createEntityManager();
EntityTransaction transaction = entityManager.getTransaction();
transaction.begin();
entityManager.persist(member);
Member memberEntity = entityManager.find(Member.class, 1L);
Order order = new Order();
order.setUuid(UUID.randomUUID().toString());
order.setOrderDatetime(LocalDateTime.now());
order.setOrderStatus(OPENED);
order.setMemo("부재시 전화주세요.");
order.setMemberId(memberEntity.getId()); // 외래키를 직접 지정
entityManager.persist(order);
transaction.commit();
Order orderEntity = entityManager.find(Order.class, order.getUuid());
// FK 를 이용해 회원 다시 조회
Member orderMemberEntity = entityManager.find(Member.class, orderEntity.getMemberId());
// orderEntity.getMember() // 객체중심 설계라면 객체그래프 탐색을 해야하지 않을까?
log.info("nick : {}", orderMemberEntity.getNickName());
}