2017-05-07 26 views
2

如何使用CriteriaQuery中和EntityManager的這個SQL查詢創建查詢:查詢使用CriteriaQuery中和的EntityManager(休眠)

SELECT * FROM user WHERE user.login = '?' and user.password = '?' 

我試試這樣:

 final CriteriaBuilder criteriaBuilder = getEntityManager().getCriteriaBuilder(); 
     final CriteriaQuery<User> criteriaQuery = criteriaBuilder.createQuery(User.class); 
     Root<User> root = criteriaQuery.from(User.class); 
     criteriaQuery.select(root); 
     criteriaQuery.where(criteriaBuilder.gt(root.get("login"), userLogin)); 
     return getEntityManager().createQuery(criteriaQuery).getResultList().get(0); 

回答

0

您的代碼看起來像它的上正確的軌道,除了它只有一個WHERE條件,它不符合您的原始SQL查詢,它有兩個條件。

CriteriaBuilder cb = em.getCriteriaBuilder(); 
CriteriaQuery<User> q = cb.createQuery(User.class); 
Root<User> c = q.from(User.class); 
q.select(c); 
ParameterExpression<String> p1 = cb.parameter(String.class); 
ParameterExpression<String> p2 = cb.parameter(String.class); 
q.where(
    cb.equal(c.get("login"), p1), 
    cb.equal(c.get("password"), p2) 
); 
return em.createQuery(q).getResultList().get(0); 

作爲一個方面說明,在現實生活中,你通常會可以在數據庫中存儲原始用戶密碼。相反,你需要存儲一個醃製和加密的密碼。所以希望你的實際程序不存儲原始密碼。

+0

非常感謝你 – studentST