엔티티에서 가장 중요한 부분은 연관관계 설정이라고 생각했다. JPA를 사용했기 때문에 일반적으로 외래키를 필드로 넣어주는게 아닌 객체 자체를 필드로 넣었다. 이로 인해 객체 간 연관관계를 맺고 있기에 CRUD 이벤트 발생 시 그에 맞게 연관관계 처리를 잘 해줘야 한다.
코드를 다 첨부하기엔 너무 길어서 주요 메소드 부분만 정리하였다.
(1) Member
public void setLocation(Location location) {
// 기존 지역 정보 삭제
if(this.location != null) {
this.location.getMembers().remove(this);
}
this.location = location;
location.getMembers().add(this); // 연관관계 추가
}
(2) Product
public void setProductStatus(ProductStatus productStatus) {
if(this.productStatus != null && this.productStatus.equals(ProductStatus.COMPLETE)) { // 거래완료에서
if(productStatus.equals(ProductStatus.SALE) || productStatus.equals(ProductStatus.RESERVATION)) { // 예약중 or 판매중으로 변경 시
this.deal.setProduct(null); // 해당 상품 거래 연관관계 삭제
}
}
this.productStatus = productStatus;
}
public void setMember(Member member) {
// 등록된 상품의 등록자가 바뀔 일은 없음.
// 초기 등록자 설정만 필요
this.member = member;
this.member.getProducts().add(this);
}
public void setCategory(Category category) {
if(this.category != null) {
this.category.getProducts().remove(this); // 예전 카테고리의 상품목록에서 제거
}
this.category = category; // 새롭게 설정될 카테고리 설정
category.getProducts().add(this);
}
public void setLocation(Location location) {
if(this.location != null) {
this.location.getProducts().remove(this);
}
this.location = location; // 등록자의 지역으로 상품 지역 설정
this.location.getProducts().add(this);
}
(3) Comment
public void setProduct(Product product) {
if(product == null) { // 연관관계 삭제
this.product.getComments().remove(this);
}else {
if(this.product != null) {
this.product.getComments().remove(this);
}
this.product = product;
product.getComments().add(this);
}
}
(4) Deal
요구사항 중에 상품의 진행 단계를 자유롭게 바꿀 수 있었다. 그에 의해 처리해줘야 할 경우의 수가 조금 더 많았다.
public void setProduct(Product product) {
this.product = product;
if(product == null) { // 상품 자체 삭제 또는 상품 진행 단계 변경(거래완료 -> 예약중 or 거래완료 -> 판매중)으로 인한 연관관계 삭제
//this.product.setDeal(null); // 상품 - 거래 연관관계 삭제
this.member.getDeals().remove(this); // 회원 - 거래 연관관계 삭제
}else {
this.product.setDeal(this);
this.member.getDeals().add(this); // 회원의 거래 목록에 추가
}
}
'개인 프로젝트' 카테고리의 다른 글
3 - (4). 주요 코드 - Controller (0) | 2022.01.23 |
---|---|
3 - (3). 주요 코드 - Service (0) | 2022.01.23 |
3 - (2). 주요 코드 - Repository (0) | 2022.01.23 |
2. ER Diagram (0) | 2022.01.23 |
1. 서론 - 시작 계기, 진행 방향 (0) | 2022.01.23 |