실전 예제

Entity

order와 delivery는 1:1, product과 category는 N:M이다.

ERD

member, order, delivery 관계에서 FK는 주 테이블인 orders에 넣는다. category와 item은 다대다 관계에서 중간 테이블을 둔다. 여기서는 연습용으로 @ManyToMany를 사용한다.

Entity 상세

category와 item은 다대다 관계이지만 중간 테이블을 만들지 않았다.

연관 관계 구현

@Entity
public class Delivery {
    @Id
    @GeneratedValue
    private Long id;

    private String city;
    private String street;
    private String zipcode;

    private DeliveryStatus status;

    @OneToOne(mappedBy = "delivery")
    private Order order;
}
  • 예제에서는 item과 category 사이에 @ManyToMany를 썼지만 실전에서는 사용하지 않는다.

    • 중간 테이블을 이용해 일대다, 다대일로 풀어낸다.

    • 실전에서는 중간 테이블이 단순하지 않기 때문이다.

    • 필드를 추가할 수도 없고 엔티티와 테이블이 일치하지 않아 제약이 많다.

@JoinColumn

  • 외래 키를 매핑할 때 사용한다.

  • 외래 키가 참조하는 대상 테이블의 칼럼명이 다를 때는 referencedColumnName을 사용해 지정해준다.

@ManyToOne

  • fetch, cascade

    • 추후 설명한다.

  • targetEntity

    • 제네릭이 없던 시절에 사용하던 옵션이라 몰라도 된다.

@OneToMany

  • 속성 설명에 다대일은 mappedBy가 없고 일대다는 있다.

    • 즉, 다대일이 붙은 곳은 꼭 연관 관계의 주인이 되어야 한다는 뜻이다.

Last updated