开发者

hibernate query language or using criteria?

Any one who tell me the query using criteria/hql/sql. Requirement is that user en开发者_如何学Cter email or username the query return the password of the user from table user.


The Criteria API is very appropriate for dynamic query generation and would have my preference here. You could do something like this:

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();

Note that I'm a bit extrapolating but you shouldn't store clear passwords in database and you shouldn't send passwords by email (which is unsecure by nature). Actually, a common procedure for password recovery is to send a link with a limited lifetime by mail allowing the user to enter a new password.


Update: Actually, you may not need a dynamic query here but I'm leaving the above for reference.

To implement an OR with the Criteria API, you can do something like this:

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);

In HQL, you could run the following query:

from User s 
where u.username = :usernameOrPassword 
   or u.password = :usernameOrPassword

In this case, it doesn't matter which solution you choose, both will do the job.


If all you're doing is fetching one field, you probably just want to go hql (or possibly sql).

If you do criteria, I believe you're pulling back the entire object, just to eventually use one field.

Edit: That's a really broad question. Here is a tutorial

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜