2016-07-15 55 views
0

當我調用createQuery(String,Class)應用程序掛起時。 Hibernate的最後一個INFO是「使用ASTQueryTranslatorFactory」,但沒有任何反應。下面是代碼:使用JPQL的createQuery掛起

public User getUserByLogin(String username) { 
    String queryString = "SELECT u FROM USERS u WHERE u.USERNAME = :username"; 
    TypedQuery<User> query = entityManager.createQuery(queryString, User.class); 
    return query.setParameter("username", username).getSingleResult(); 
} 

它掛在TypedQuery<User> query = entityManager.createQuery(queryString, User.class);

但是,什麼是有趣的,當我改變身體的方法是這樣的:

public User getUserByLogin(String username) { 
    CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder(); 
    CriteriaQuery<User> criteriaQuery = criteriaBuilder.createQuery(User.class); 
    Root<User> userRoot = criteriaQuery.from(User.class); 
    criteriaQuery.select(userRoot).where(criteriaBuilder.equal(userRoot.get("username"), username)); 
    TypedQuery<User> query = entityManager.createQuery(criteriaQuery); 
    return query.getSingleResult(); 
} 

它工作正常。同樣的環境,只是不同的方法。我錯過了什麼?

回答

1

爲什麼的FROM USERS u代替FROM USER u

+0

用戶來說是數據庫表名。 – Franek

+0

是的,那是什麼錯誤。使用JPQL,您需要查詢實體名稱而不是表名。 –