[241113 TIL] AI 검증 비즈니스 프로젝트

카테고리, 가게, 리뷰 CRUD API 구현

 

  • API 동작 확인
  • 리뷰 평점 스케줄러 적용
  • Soft Delete 적용

API 동작 확인

⚠️ 트러블슈팅 ⚠️

 

1. 문제 정의

  • 가게 생성 API 동작 확인 중 에러 발생 (POST)
org.springframework.dao.DataIntegrityViolationException: could not execute statement [Duplicate entry 'b\xDD\x98\xF0\xBD\x8E\x11\xED\x93\xAB2P\x96\xB3\x9FG' for key 'p_stores.UK260ia2wautdp3fq67hyklg3cu'] [/* insert for com.sparta.gourmate.domain.store.entity.Store */insert into p_stores (average_rating,category_id,created_at,created_by,deleted_at,deleted_by,is_deleted,location,name,updated_at,updated_by,user_id,id) values (?,?,?,?,?,?,?,?,?,?,?,?,?)]; SQL [/* insert for com.sparta.gourmate.domain.store.entity.Store */insert into p_stores (average_rating,category_id,created_at,created_by,deleted_at,deleted_by,is_deleted,location,name,updated_at,updated_by,user_id,id) values (?,?,?,?,?,?,?,?,?,?,?,?,?)]; constraint [p_stores.UK260ia2wautdp3fq67hyklg3cu]

 

 

  • org.springframework.dao.DataIntegrityViolationException
    • 데이터베이스에서 중복된 값이 삽입되려고 했을 때 발생하는 오류

2. 원인 추론

 

1) 가게 엔티티에 중복된 값을 허용하지 않는 컬럼 확인

  • id - UUID 로 자동 생성되므로 고려 대상 아님
  • user_id - 같은 유저로 여러 개의 가게 생성이 가능됨을 확인
  • category_id - 같은 카테고리의 가게를 생성하려고 할 때 위의 에러 발생

2) 카테고리 엔티티와 가게 엔티티의 연관관계 확인

  • 현재 카테고리와 가게의 연관관계 - @OneToOne
  • 한 가게 당 하나의 카테고리를 갖기에 위 연관관계 설정

3) 연관관계 고려

  • @OneToOne
    • 한 가게가 하나의 카테고리만 가질 수 있다는 것 의미
    • 예를 들어, "피자 가게" 하나가 "피자 카테고리"를 가진다면 적합
    • 여러 가게가 동일한 카테고리를 공유할 수 있다면, @OneToOne 설정은 적합하지 않음

 

 

3. 해결 방안 및 결과

  • 연관관계 변경
    • 여러 개의 가게가 하나의 카테고리를 공유 ➡️ @ManyToOne 이 적합
    • 가게 엔티티에서 @ManyToOne 사용하고, 카테고리 엔티티에서 @OneToMany 사용
@Entity
public class Store {
	// 중략
    @ManyToOne
    @JoinColumn(name = "category_id")
    private Category category;
   
}



@Entity
public class Category {
	// 중략
    @OneToMany(mappedBy = "category")
    private List<Store> storeList;
    
}
  • 연관관계 변경 후 같은 카테고리를 가진 가게 생성 성공!



+ Recent posts