java hibernate查询语言还是使用条件? 1 月,3 周 Questions & Answers 2617 任何使用criteria/hql/sql告诉我查询的人。 要求是用户输入电子邮件或用户名,查询返回用户的密码 表用户中的用户
# 1 楼答案 如果您所做的只是获取一个字段,那么您可能只想使用hql(或者sql) 如果你这样做,我相信你是在拉回整个对象,只是为了最终使用一个字段 编辑: 这是一个非常广泛的问题。 这是一个tutorial
# 2 楼答案 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 在这种情况下,你选择哪种解决方案并不重要,两者都可以
# 1 楼答案
如果您所做的只是获取一个字段,那么您可能只想使用hql(或者sql)
如果你这样做,我相信你是在拉回整个对象,只是为了最终使用一个字段
编辑: 这是一个非常广泛的问题。 这是一个tutorial
# 2 楼答案
Criteria API非常适合动态查询生成,我在这里更喜欢它。你可以这样做:
请注意,我有点外推,但你们不应该在数据库中存储清晰的密码,也不应该通过电子邮件发送密码(这本质上是不安全的)。实际上,密码恢复的一个常见过程是通过邮件发送一个生命周期有限的链接,允许用户输入新密码
更新:实际上,这里可能不需要动态查询,但我将以上内容留作参考
要使用Criteria API实现OR,可以执行以下操作:
在HQL中,可以运行以下查询:
在这种情况下,你选择哪种解决方案并不重要,两者都可以