반응형

문제/에러

에러로그:

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

 

 

https://stackoverflow.com/questions/29936483/simple-manytoone-relation-could-not-resolve-property-org-hibernate-queryexcep

 

 

반응형