inflearn logo
강의

Course

Instructor

Create your first server with Java and Spring Boot, from development to deployment, easily! [All-in-one server development package]

Lecture 26. Writing Various Queries Using Spring Data JPA

26강 삭제 기능관련 질문입니다..!!

Resolved

427

vosxja19200

3 asked

0


UpdateUser 사용시


deleteUser 사용시

2024-02-10 21:46:30.786 ERROR 10012 --- [nio-8080-exec-9] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : 
Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; 
nested exception is org.springframework.dao.IncorrectResultSizeDataAccessException: 
query did not return a unique result: 2; 
nested exception is javax.persistence.NonUniqueResultException: 
query did not return a unique result: 2] with root cause

오류코드를 보니 updateUser는

findById의 결과값이 고유하므로 문제가 일어나지않는데,

 

deleteUser는 findByName으로 유저를 찾기때문에

같은 이름이 존재하면 결과값이 고유하지않으므로

오류가 발생하는거 같은데, (엄준식이 2명존재)

 

처음부터 Id 값을 받아오거나

생성시에 같은 이름을 못만들게 막는거 말고는

해결할 방법이 없을까요?

java spring-boot jpa

Answer 2

1

lannstark

안녕하세요 영후이님!! 정말 좋은 질문이십니다~~ 👍

이 부분은 사실 "교육적인 측면"이 크게 작용한 기능입니다. 말씀해주신 것처럼 기본적으로 delete를 할때 "동명이인"이 있을 수 있는 상황에서 name을 기준으로 제거하는 로직을 작성하면 안되기 때문이죠.

하지만 JpaRepository에 있는 기본 기능인 deleteById()외에 Spring Data JPA를 이용해서 쿼리를 만드는 방법을 쉽고 자연스럽게 알려드리기 위해 이름을 기준으로 삭제하는 기능을 넣은것입니다!

 

실제로는 다음과 같은 방법을 사용하는 것이 일반적입니다! 👍

  • 특정 데이터에 대한 수정 / 삭제는 unique한 key를 기준으로 일어납니다.

    • 예를들어 id와 같은 PK는 unique하니 보통은 id를 이용해 수정이나 삭제를 진행하게 됩니다.

  • 따라서 엄준식 님이 2명 계시다면, 1번 엄준식님과 2번 엄준식님을 구분해서 삭제하게 되죠!

  • 물론 지금 프로젝트에 이를 적용하려면 클라이언트 쪽 (화면 쪽) 코드도 같이 변경되어야 합니다.

 

답변이 도움이 되었으면 좋겠습니다. 감사합니다! 🙇

0

vosxja19200

답변 감사합니다!! 강의 너무 재밌어요 😊

0

lannstark

재밌게 봐주셔서 감사해요~~~! 😊 새해복 많이 받으시고, 연휴 마지막 날도 행복한 하루 되세요~!! 🙏

1

vosxja19200

강의 뒷부분에 추가내용이 있군요 머쓱머쓱...;

근본적인 해결방법은 안되겠지만

findByNameAndAge(string name, int age)

이런식으로 하면 대상을 특정할때 범위를 줄일수 있겟군요..

리액트 관련 질문이 있습니다.

0

60

2

스프링부트 버전

0

66

2

7강 강의를 들으려고 했는데 오류가 나서 서버가 안 켜지는거 같아요.

0

55

2

33강. UserLoanHistory의 관계성에 대한 질문

1

51

2

Java JDK 버전 문의의 건

0

126

2

ec2 에서 Linux버전이 달라져서 설치가 안되는것 같은데 자료 최신화좀 해주세요.

0

81

3

h2 console 접속했을 테이블 질문

1

62

1

ec2 서버에서 스프링 실행도 되고 인바운드 설정까지 했는데 index.html 안됨

0

71

2

15강. updateUser() 질문

0

51

2

깃허브 질

0

77

2

여기까지 다 끝냈다고 하셨는데

0

75

2

왜안될까요

0

67

2

MySQL 창이안ㄴ뜹니다

0

53

2

포스트맨

0

46

1

spring 개념적인 질문

0

68

2

인텔리제이 샘플코드 실행 안됨 오류

0

138

2

aws 배포할때 .env 파일에 저장한 환경변수에 관하여 여쭤볼게 있습니다

0

81

1

마이그레이션 오류입니다.

0

165

3

Whitelabel Error Page 오류가 났습니다.

0

156

2

안녕하십니까! 오류가 났습니다.. 도와주세요 ㅜㅜ

1

87

3

궁금한게 있습니다.

0

54

2

DTO 관련

0

66

2

궁금한게 있습니다!

0

60

2

35강에서 returnBook 에서 userLoanHistory 값 중복에 관하여

0

54

2