[JPA] Could not resolve root entity

bamboocoding·2024년 7월 17일

테스트 코드를 돌려보던 중, 작성한 쿼리문에서 다음과 같은 오류가 발생했다.

Caused by: java.lang.IllegalArgumentException: org.hibernate.query.sqm.UnknownEntityException: Could not resolve root entity 'users'

원인 분석

@Repository
public class UserRepository {
    @PersistenceContext
    EntityManager em;

    --- 생략

    public List<User> findAll() {
        return em.createQuery("select m from Users m", User.class)
                .getResultList();
    }

    public Optional<User> findByLoginId(String loginId) {
        return findAll().stream()
                .filter(m->m.getLoginId().equals(loginId))
                .findFirst();
    }

}

문제는 findAll() 메서드의 작성된 쿼리문에 있었다.
쿼리에서 작성된 엔티티 클래스 이름은 실제 엔티티 클래스 이름과 동일해야 한다.

@Entity
@Getter @Setter
@Table(name="Users")
public class User {

}

user란 이름이 대부분의 데이터베이스에서 예약어다보니 Table 어노테이션의 name 속성을 통해 테이블명을 Users로 바꿨다.
나는 바뀐 테이블명으로 쿼리문에 명시해야 인식할 줄 알았는데, 실제로는 엔티티 이름 그대로 사용해야 했다.

profile
배운 것을 기록하는 습관을 길들이자.

0개의 댓글