有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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


共 (2) 个答案

  1. # 1 楼答案

    如果您所做的只是获取一个字段,那么您可能只想使用hql(或者sql)

    如果你这样做,我相信你是在拉回整个对象,只是为了最终使用一个字段

    编辑: 这是一个非常广泛的问题。 这是一个tutorial

  2. # 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
    

    在这种情况下,你选择哪种解决方案并不重要,两者都可以