hibernate查询语言还是使用标准?
任何使用criteria / hql / sql告诉我查询的人。 要求是用户输入电子邮件或用户名,查询返回表用户的用户密码。
如果你所做的只是获取一个字段,你可能只想要去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
在这种情况下,选择哪种解决方案并不重要,两者都能完成这项工作。
- Hibernate DetachedCriteria多个结果导致java
- 如何解决Hibernateexception的原因“调用setter时发生了IllegalArgumentException”?
- Hibernate,Log4j和SLF4j
- 如何在Hibernate HQL中使用Oracle的regexp_like?
- 使用Hibernate Criteria和Oracle,有什么更好的方法与时间一起工作?
- 错误:传递给持久化的分离实体 – 尝试持久化复杂数据(Play-Framework)
- JPA + Hibernate – 如何在不获取该实体的情况下获取子实体的FK?
- 为什么每次运行我的应用程序时Hibernate都会插入重复的记录?
- Hibernate一级缓存 – 是否同步?