스파이더 웹 개발

JPA 기타 잡담 본문

JPA

JPA 기타 잡담

스파이더웹 2022. 9. 26. 12:47
728x90
반응형

JPA 설계시 가장 객체지향스럽게 설계하는 것은 엔티티 안에서 비즈니스 로직을 구현하는 것이다

 

setter, getter를 사용하여 외부에서사용하는 것이 아니다

@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "dtype")
@Getter @Setter
public abstract class Item {
    @Id
    @GeneratedValue
    @Column(name = "item_id")
    private Long id;

    private String name;
    private int price;
    private int stockQuantity;

    @ManyToMany(mappedBy = "items")
    private List<Category> categories = new ArrayList<>();

    //비즈니스 로직
    //재고수량 증가로직
    public void addStock(int quantity){
        this.stockQuantity += quantity;
    }

    public void removeStock(int quantity){
        int restStock = this.stockQuantity - quantity;

        if (restStock<0){
            throw new NotEnoughStockException("need more stock");
        }
        this.stockQuantity=restStock;
    }

}

위의 예제처럼 재고수량 증가와 감소 로직을 엔티티 안에서 구현하는 것이다

 

 

변경감지와 병합

변경 감지 기능은 원하는 속성만 선택해서 변경할 수 있으나, 병합을 사용하면 모든 내용이 변경된다

그렇깅 변경감지를 사용해야한다

728x90
반응형

'JPA' 카테고리의 다른 글

API + JPA  (0) 2022.09.28
엔티티 설계시 주의점  (0) 2022.09.19
객체 지향 쿼리 언어 - 2  (0) 2022.09.17
객체 지향 쿼리 언어  (0) 2022.09.16
값 타입  (0) 2022.09.16
Comments