Just Do IT!
Query did not return a unique result: 2 results were returned 오류 해결 본문
개발 공부/Error
Query did not return a unique result: 2 results were returned 오류 해결
MOON달 2025. 3. 21. 12:36728x90
반응형
지금 KERNEL 360에서 기업 연계 프로젝트(=파이널 프로젝트)를 진행하고 있다.
이제 기획은 완료했고 개발 단계로 넘어갔는데, 직접 API를 개발하면서 오류가 생겨서 기록하려고 한다.
프로젝트 생성하는 기능을 만들고, 전체 프로젝트 조회를 하려고 하는데 이런 오류가 생겼다.

@Repository
public interface CompanyProjectRepository extends JpaRepository<CompanyProject, Long> {
Optional<CompanyProject> findByProjectAndCompanyProjectRole(Project project, CompanyProjectRole companyProjectRole);
}
이 method를 통해 해당 프로젝트와, 프로젝트를 담당하는 개발사/고객사를 찾기 위한 것인데
unique하지 않고 결과가 여러 개가 나와서 오류가 난다는 것이었다.
그래서 Optional로 받지 말고 List로 받으면 오류가 해결되지만, 나는 애초에 생성할 때 설계를 잘못했기에 생성 단계에서 코드를 좀 수정하여 해결하였다.
원래는 고객사/개발사를 지정하면 한 번만 company_project 에 저장되어야 하는 거였다.
그런데 고객사 담당자/일반 참여자 이런 식으로 2번씩 저장하게 되어서 중복이 발생하여 unique하지 않다는 오류가 생겼다.
그래서 그 로직을 수정하여 해결하였다.
저장하기 전에 해당 프로젝트와 회사가 연결된 id가 존재하는지 먼저 확인하고 있으면 저장하지 않고, 없으면 저장하는 걸로.
// 기존에 해당 회사와 해당 프로젝트가 연결되어 있는지 확인
boolean isCompanyProjectExisting = companyProjectRepository.existsByCompanyAndProject(company, project);
if(!isCompanyProjectExisting) {
CompanyProjectDTO companyProjectDTO = CompanyProjectDTO.builder()
.companyId(company.getId())
.projectId(project.getId())
.companyProjectRole(companyRole)
.build();
CompanyProject companyProject = companyProjectDTO.toEntity(company, project, companyRole);
companyProjectRepository.save(companyProject);
}
코드가 길고 아직 PR도 날리지 않아서 일부만 잘랐다.
위처럼 boolean으로 존재 여부를 묻고 다음에 저장하니까 두번 저장되는 오류를 해결할 수 있었다.
그렇게 되니
Optional로 찾아도 하나만 나와서 위 오류를 해결할 수 있었다.
728x90