[JPA Error] IncorrectResultSizeDataAccessException ν•΄κ²°

ohahsisΒ·2024λ…„ 5μ›” 14일

πŸ“ μ½”λ“œ

  • ν•΄μ‹œνƒœκ·Έ ν•„λ“œ, κ΄€λ ¨ λΉ„μ¦ˆλ‹ˆμŠ€ 둜직 쀑 일뢀λ₯Ό λ°œμ·Œν–ˆλ‹€.

Hashtag

private String name;

NoteService

hashtag = hashtagRepository.findByName(name);

πŸ“ Error

λ©”μ‹œμ§€

  • Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: org.springframework.dao.IncorrectResultSizeDataAccessException: Query did not return a unique result: 7 results were returned] with root cause
  • org.hibernate.NonUniqueResultException: Query did not return a unique result: 7 results were returned

뢄석

  • JPA λ ˆν¬μ§€ν† λ¦¬μ—μ„œ findBy~~ λ©”μ„œλ“œλ₯Ό 톡해 단일 selectλ₯Ό ν•˜λ©΄μ„œ λ°œμƒν•œ μ˜ˆμ™Έμ΄λ‹€.
  • μ›ν•˜λŠ” 쑰건의 λ°μ΄ν„°λŠ” 단일 데이터인데, db에 ν•΄λ‹Ή 쑰건의 데이터가 μ—¬λŸ¬κ°œκ°€ μ‘΄μž¬ν•˜λ©° λͺ¨λ“  데이터가 λ°˜ν™˜λ˜μ–΄ μ˜ˆμ™Έκ°€ λ°œμƒν–ˆλ‹€.
  • μ΄ˆλ°˜μ— ν•΄μ‹œνƒœκ·Έλ₯Ό μƒμ„±ν•˜λŠ” λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ—μ„œ 쑴재 μ—¬λΆ€ 검증이 λˆ„λ½λ˜λ©° 데이터가 μŒ“μΈ 것 κ°™λ‹€. MySQL ν…Œμ΄λΈ”μ„ μ‘°νšŒν•΄λ³΄λ‹ˆ μ‹€μ œλ‘œ 쀑볡 데이터가 μŒ“μ—¬ μžˆλŠ” 것을 확인할 수 μžˆμ—ˆλ‹€.

πŸ“ ν•΄κ²°

  • λ‹¨μˆœνžˆ μ•„λž˜ λͺ…λ Ήμ–΄λ‘œ hashtag ν…Œμ΄λΈ” λ‚΄μ˜ λ ˆμ½”λ“œλ“€μ„ μ‚­μ œν•˜λŠ” 방법을 생각해봀닀.
	truncate table hashtag;
  • ν•˜μ§€λ§Œ note_hashtag ν…Œμ΄λΈ”μ— μ˜ν•΄ μ™Έλž˜ ν‚€λ‘œ μ œμ•½μ΄ κ±Έλ € μžˆμ—ˆκ³ , ν•¨λΆ€λ‘œ 데이터λ₯Ό μ‚­μ œν•  수 μ—†λ‹€κ³  ν•œλ‹€.
  • κ·Ήλ‹¨μ μœΌλ‘œ ν•΄λ‹Ή DB 전체λ₯Ό μ‚­μ œν•˜λŠ” 것이 κ·Έ λ‹€μŒμœΌλ‘œ λ– μ˜€λ₯Έ λ°©λ²•μ΄μ—ˆλ‹€:D (μ΄λŠ” μ‹€μ œ μ‚¬μš©ν•˜λŠ” 데이터가 μ—†κΈ° λ•Œλ¬Έμ— κ°€λŠ₯ν•œ 일이닀.)
  • μƒκ°ν•œ 방법듀은 총 λ‹€μŒκ³Ό κ°™λ‹€.
  • μš°μ„ μ€ db λ₯Ό μ‚­μ œν•˜κ³  λ‹€μŒμ— 기타 방법을 μ•Œμ•„λ³΄λ„λ‘ ν•˜μž.
  • μ‚­μ œ ν›„μ—λŠ” 같은 문제λ₯Ό λ°©μ§€ν•˜κΈ° μœ„ν•΄ ν•΄λ‹Ή μ»¬λŸΌμ— unique 섀정을 ν•΄μ£Όμ—ˆλ‹€.

Hashtag

    @Column(name = "name", unique = true)
    private String name;

참고 자료

profile
λ°±μ—”λ“œ κ°œλ°œμžμž…λ‹ˆλ‹€.

0개의 λŒ“κΈ€