[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