Error / / 2023. 3. 10. 10:22

[Error - Spring Jpa] javax.persistence.EntityNotFoundException: Unable to find 에러와 해결방법 3가지

javax.persistence.EntityNotFoundException: Unable to find ~~~ 에러가 발생할때는

해당 entity를 연관관계를 통해 가져올때 없는 값일때 (중간에 삭제되었거나, 애초부터 없던 값) 발생하게 된다.

예를 들어서 A라는 엔티티와 ManyToOne으로 연관관계가 맺어진 B라는 테이블이 있을때

A안에 B라는 필드가 null이 아니면서 참조할 수 없는 잘못된 값인 경우에 발생하게 된다.

B테이블

bseq bname
1 hello
2 world

 

A테이블

aseq aname bseq
1 홍길동 1
2 김길동  
3 박길동 3

 

위의 테이블을 entity로 변환해본다면 대략 아래와 같은 형식이 될텐데

Public Class A {
	private String aseq;
	private String aname;
    
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "bseq")
	private B b;
}

Public Class B {
	private String bseq;
	private String bname;
    
    @OneToMany(mappedBy = "b")
    private List<A> alist;
}

 

aseq가 2인 경우에 b.seq(null이 아닌 공백)를 하게 된다면 javax.persistence.EntityNotFoundException: Unable to find 와 같은 에러가 발생하게 된다.

aseq가 3인 경우(db에 없는 값을 참조함) a.getB().getBseq()를 실행하는 경우는 당연히 NPE가 발생하게 된다.

이 문제를 해결하기 위해서는

  • 해당 문제가 발생하는 db 컬럼값을 정상적으로 채워주거나 로직상에서 저런 컬럼이 들어오지 못하도록 제한시킨다
  • DB에 FK를 걸어 insert 시 문제가 발생하도록 제약 조건을 생성한다(하지만 실무에서는 힘든 경우가 있음)
  • @NotFound(action = NotFoundAction.IGNORE)를 해당 문제가 발생하는 연관관계 멤버변수에 추가한다.

 

 

  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유