@Entity
@Table(name = "orders") // 테이블명 설정
@Getter @Setter
public class Order {

    @Id
    @GeneratedValue
    @Column(name = "order_id")
    private Long id;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "member_id") // FK //연관관계 주인
    private Member member;

	... 생략

    //==연관관계 편의 메서드==//
    // 컨트롤 하는쪽이 들고있는게 좋다.
    // 양방향일 때 사용하면 좋다 - 양쪽에 세팅해야하는 것을 원자적으로 한번에 세팅한다.
    public void setMember(Member member) {
        this.member = member;
        member.getOrders().add(this);
    }

    // 연관관계 메서드를 사용 안할 경우 - 비지니스 로직에서 아래처럼 처리해줘야 한다. -> 연관관계 메서드로 처리 -> 누락 실수 등을 방지
    // Member member = new Member();
    // Order order = new Order();
    //
    // member.getOrders().add(order);
    // order.setMember(member);

    public void addOrderItem(OrderItem orderItem) {
        orderItems.add(orderItem);
        orderItem.setOrder(this);
    }

    public void setDelivery(Delivery delivery) {
        this.delivery = delivery;
        delivery.setOrder(this);
    }

}

코드 주석에 설명 참조.

 

코드 누락등의 실수 방지

양쪽에 반영해야되는 것을 연관관계 메소드로 한번에 처리.

 

 

예시 2)

@Entity
@Getter @Setter
public class Category {

    @Id
    @GeneratedValue
    @Column(name = "category_id")
    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<>();

    // 셀프 양방향 entity 처리
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "parent_id")
    private Category parent;

    @OneToMany(mappedBy = "parent")
    private List<Category> child = new ArrayList<>();

    //==연관관계 메서드==//
    public void addChildCategory(Category child) {
        this.child.add(child);
        child.setParent(this);
    }
}

+ Recent posts