스프링(Spring)/Trouble Shooting
[SpringBoot] 에러해결: org.hibernate.QueryException: could not resolve property: article_id of: com.example.spring_jpa.Comment
2022. 1. 10. 00:40반응형
문제/에러
에러로그:
org.hibernate.QueryException: could not resolve property: article_id of: com.example.spring_jpa.Comment
설명:
hibernate가 특정 property (article_id ) 를 해석할 수 없음
상황
- 아래는 댓글 엔티티이다. 이 댓글 엔티티는 외래키로, 게시글 ID를 가지고 있다.
- 나는, 새로운 댓글 엔티티를 쿼리문으로 이용해서 새롭게 추가하고 싶었다.
- 하지만 위의 에러가 발생했다.
@Entity
@Table(name = "comment")
@Getter @Setter
public class Comment {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long comment_id;
private Long comment_parent_id;
private String comment_contents;
private Long comment_order;
private LocalDateTime comment_datetime;
private String comment_author;
private String comment_password;
private String comment_ip_address;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "article_id")
private Article article;
}
해결방안
- 쿼리문을 제대로 썼는 지 확인해보자. 보통, 외래키를 가진 엔티티에 대한 쿼리문 잘못 코딩했을 확률이 높다.
쿼리문을 After: 와 같이 수정해준다. 댓글 엔티티에서, 게시글(Article) 엔티티의 멤버를 한번 더 참조해야한다.
Before:
public List<Comment> findCommentsByArticleId(Long articleId) {
TypedQuery<Comment> query = em.createQuery("SELECT a FROM Comment a WHERE a.article_id = :id", Comment.class);
return query.setParameter("id", articleId)
.getResultList();
}
After:
public List<Comment> findCommentsByArticleId(Long articleId) {
TypedQuery<Comment> query = em.createQuery("SELECT a FROM Comment a WHERE a.article.article_id = :id", Comment.class);
return query.setParameter("id", articleId)
.getResultList();
}
위와 같이, 변경하였더니, 에러는 말끔히 해결되었다.
참고자료
https://whitekeyboard.tistory.com/313
반응형