[英]hibernate query language or using criteria?
任何使用條件/ hql / sql告訴我查詢的人。 要求是用戶輸入電子郵件或用戶名查詢從表user返回用戶的密碼。
Criteria API非常適合動態查詢生成,在此我會優先考慮。 您可以執行以下操作:
Criteria criteria = session.createCriteria(User.class)
.setProjection(Projections.property("password"));
if (email != null) {
criteria.add(Expression.eq("email", email));
}
if (username != null) {
criteria.add(Expression.eq("username", username));
}
String password = (String) criteria.uniqueResult();
請注意,我有點推斷,但您不應在數據庫中存儲明文密碼,也不應通過電子郵件發送密碼(從本質上講是不安全的)。 實際上,密碼恢復的常見過程是通過郵件發送壽命有限的鏈接,允許用戶輸入新密碼。
更新 :實際上,您可能不需要在此處進行動態查詢,但是我將上面的內容留作參考。
要使用Criteria API實現“或”,您可以執行以下操作:
Criteria criteria = session.createCriteria(User.class);
Criterion username = Restrictions.eq("username", usernameOrPassword);
Criterion email = Restrictions.eq("email", usernameOrPassword);
LogicalExpression orExp = Restrictions.or(username, email);
criteria.add(orExp);
在HQL中,您可以運行以下查詢:
from User s
where u.username = :usernameOrPassword
or u.password = :usernameOrPassword
在這種情況下,選擇哪種解決方案都沒有關系,兩者都能勝任。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.