[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;
}
- 연관관계 변경 후 같은 카테고리를 가진 가게 생성 성공!

'[내일배움캠프] AI 를 활용한 백엔드 아카데미 심화 과정 > TIL' 카테고리의 다른 글
EC2 + Docker + Github Action 이용해서 자동 배포 (0) | 2024.11.15 |
---|---|
[JAVA] StringUtils.hasText - 공백, null 체크 (1) | 2024.11.14 |
[트러블슈팅] POSTMAN POST (0) | 2024.11.12 |
[Github] IntelliJ 에서 Git Branch 생성하고 Merge 하기 (0) | 2024.11.11 |
S.A (Starting Assignments) 작성 (2) | 2024.11.07 |