도메인 분석 설계

born_a·2022년 9월 26일
0

엔티티 클래스 개발1

@Enumurated : 기본 속성은 ORDINAL이다. ORDINAL은 1,2,3,4 숫자로 들어가기 때문에 새로운 속성이 들어갈때 순서가 밀릴 수 있으므로 꼭 STRING으로 넣어주자.

엔티티 클래스 개발2

다대다 관계는 @JoinTable을 통해서 중간 테이블을 만들어 일대다, 다대일로 풀어내야한다.
Item.java

@ManyToMany
@JoinTable(name = "category_item",
        joinColumns = @JoinColumn(name = "category_id"),
            inverseJoinColumns = @JoinColumn(name = "item_id") //item쪽으로 들어가는 테이블 매핑)
    private List<Category> categories = new ArrayList<>();

엔티티 설계시 주의점

command + shift + F : Find in path
option + 엔터 : static import로 바꿔줌

cascade

@OneToMany(mappedBy = "order", cascade = CascadeType.ALL)
    private List<OrderItem> orderItems = new ArrayList<>();

persist(orderItemA)
persist(orderItemB)
persist(orderItemC)
persist(order)
이렇게
엔티티당 각각 persist해주어야 하는데 cascade를 쓰면
persist(order) 한번만 해주어도 됨. 컬렉션 안에 있는 orderItem을 persist해줌.

연관관계 메서드

양방향에서는 연관관계 메서드가 있는 것이 좋다.
연관관계 편의 메서드는 컨트롤하는 쪽이 들고있는것이 좋다.

Order.java

@Entity
@Table(name = "orders")
@Getter @Setter
public class Order {

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

    @ManyToOne(fetch = LAZY)
    @JoinColumn(name = "member_id")
    private Member member;

    @OneToMany(mappedBy = "order", cascade = CascadeType.ALL)
    private List<OrderItem> orderItems = new ArrayList<>();

    @OneToOne(fetch = LAZY, cascade = CascadeType.ALL)
    @JoinColumn(name = "delivery_id")
    private Delivery delivery;

    //order_date로 바뀜
    private LocalDateTime orderDate; //주문시간

    @Enumerated(EnumType.STRING)
    private OrderStatus status; //주문상태 [ORDER, CANCLE]

    //==연관관계 메서드==//연관관계 세팅할때 편함.
    /*
    public static void main(Stirng[] args){
        Member member = new Member();
        Order order = new Order();

        order.setMember(member);
    }
    이렇게 코드를 줄일 수 있음
     */
    public void setMember(Member member) {
        this.member = member;
        member.getOrders().add(this);
    }

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

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





}

Cateory.java

@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")) //item쪽으로 들어가는 테이블 매핑)
     private List<Item> items = new ArrayList<>();

    @ManyToOne(fetch = 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);
    }
}

0개의 댓글

관련 채용 정보