티스토리 뷰
Entity Class로 Database를 접근하게 해줄 JpaRepository이다. (JpaRepository는 Dao 역할을 하며 DB Layer 접근자이다.)
인터페이스 생성 후 JpaRepository<Entity 클래스, PK타입>을 상속하면 CRUD 메소드가 자동 생성된다.
Comment Entity Class는 다음과 같다.
기본키는 comment_no이며, user 테이블과 user_no 컬럼으로 연결되어있다.
나는 유저 별 댓글 조회 기능을 위해 Comment Entity의 Repository 인터페이스에 findByUser함수를 작성했던 것이다.
findByUser함수를 통해 해당 유저가 쓴 댓글 수를 가져오려 했다.
하지만 이러한 에러가 발견됐다...
참고했던 블로그에서
"영속성때문에 나는 오류다. FK로 쓰는 객체가 아직 저장이 안 되서 오류가 난다고 한다.
객체간 @OneToMany, @ManyToOne같은걸 쓸 때 날 수 있다."
"@OneToMany 또는 @ManyToOne 을 사용할 때 Parent에 추가하는 Child 개체가 아직 데이터베이스에 저장되지 않아서 생긴 문제입니다. cascade = CascadeType.ALL 을 포함해야 에러 메시지가 출력되지 않습니다. "
라고 되어있어서 Comment Entity 클래스를 확인했지만 cascade는 너무나도 잘 설정되어있었다.
일단 외래키때문에 일어난 에러라는 것은 알겠고... 다시 나의 코드를 들여다봤다.
Comment 테이블과 연결된 user_no는 User 테이블의 기본키이다.
하지만 나는 findByUser함수에서 User 객체를 넘겨줄때 디폴트 생성자로 생성된 객체를 넘겨주고있었다...
다시 읽어보자... FK로 쓰는 객체가 아직 저장이 안돼서 나는 오류!!
그렇다.. 기본키이자 외래키인 userNo 값을 생성자에 담아주지 않았다!
그렇게 commentCnt를 불러오는 것에 성공했다!
눈에 보이는 해결책만 찾기에 급급했다.. 반성한다..
지금 이 글을 다시 읽어보는데 너무 바보같은 실수라서 올리기 조금 창피하다 (^^)
하지만 이런 것도 기록해놔야 다음번에 바보같이 실수안하겠지.........
이 글을 읽는 분들은 이런 바보같은 실수에도 TransientObjectException이 나는구나.. 라고 봐주시면 될 것 같다. (창피)
참고
conservative-vector.tistory.com/entry/%EC%98%A4%EB%A5%98
https://duzi077.tistory.com/143
'개발참고 > Spring' 카테고리의 다른 글
Spring Batch & Scheduler & Quartz (0) | 2023.02.12 |
---|
- Total
- Today
- Yesterday