java - hibernate查询语言还是使用条件?

标签 java hibernate orm hql criteria

任何告诉我使用 criteria/hql/sql 进行查询的人。 要求是用户输入电子邮件或用户名,查询返回密码 来自表用户的用户。

最佳答案

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 实现 OR,您可以执行以下操作:

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

在这种情况下,选择哪种解决方案并不重要,两者都可以完成工作。

关于java - hibernate查询语言还是使用条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2905273/

相关文章:

java - SQLite如何使用整数来存储价格值

java - 使用camel在名为zip-file的文件夹中解压缩文件

java - Ehcache与defaultCache?

java - Trove jar THashMap 类未找到异常

java - 如何在java中获取控制台上的方法信息

java - 在类构造函数中将对象保存到数据库是一种不好的做法吗?

java - 检查表 hibernate 中是否存在行对象

orm - 跨应用程序重用 ColdFusion ORM 实体/对象?

c# - Dapper 将特定列的子集直接返回到 DTO

sql-server - Telerik Open Access Profiler 未捕获错误消息,我该怎么办?