簡體   English   中英

休眠查詢語言或使用條件?

[英]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

在這種情況下,選擇哪種解決方案都沒有關系,兩者都能勝任。

如果您正在做的只是獲取一個字段,那么您可能只想執行hql(或者可能是sql)。

如果您符合條件,我相信您將撤回整個對象,只是為了最終使用一個字段。

編輯:這是一個非常廣泛的問題。 這是一個教程

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM