//MemberService
/**
* 회원 전체 조회
*/
@Transactional(readOnly = true)
public List<Member> findMembers() {
return memberRepository.findAll();
}
/**
* 회원 하나 조회
*/
@Transactional(readOnly = true)
public Member findOne(Long memberId) {
return memberRepository.findOne(memberId);
}
조회하는 곳에서는 @Transactional(readOnly = true)로 두면 성능 최적화된다.
@Entity
@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 addStockQuantity(int quantity) {
this.stockQuantity += quantity;
}
public void removeStockQuantity(int quantity) {
int restStock = this.stockQuantity - quantity;
if (restStock < 0) {
throw new NotEnoughStockException("Need More Stock");
}
this.stockQuantity = restStock;
}
}
도메인 주도 설계라고 해서 엔티티 자체가 해결할 수 있는 비즈니스 로직은 엔티티 안에 넣는 것이 좋다.
728x90
'Spring' 카테고리의 다른 글
[JPA 활용 2편] API 개발 기본 (0) | 2024.07.02 |
---|---|
Spring Security 없이 비밀번호 암호화, 로그인 구현하기 (0) | 2024.06.30 |
[JPA 활용1 복습] 도메인 분석 설계 (0) | 2024.06.27 |
[JPA 기본편] 객체지향 쿼리 언어2 - 중급 문법 (0) | 2024.06.26 |
[JPA 기본편] 객체지향 쿼리 언어1 - 기본 문법 (0) | 2024.06.25 |