【问题标题】:Spring Hibernate get selected columnsSpring Hibernate 获取选定的列
【发布时间】:2016-06-19 02:32:22
【问题描述】:

我正在尝试使用 hibernate 获取一些特定的列,但是这个查询总是失败。

@Override
public Users findByEmail(String emailID) {
    // TODO Auto-generated method stub
    try{

        List<Users> users = new ArrayList<Users>();

        users = this.sessionFactory.getCurrentSession().createQuery("SELECT userID, firstName, lastName, imageURL, password, emailID, enabled FROM Users WHERE emailID = :email_ID")
                .setParameter("email_ID", emailID).list();

        if(users.size() > 0)
            return (Users)users.get(0);
        else
            return null;
    }
    catch(Exception exc)
    {
        log.error(exc.getMessage());
        return null;
    }
}

这个查询总是失败,所以我使用下面的查询

    @Override
public Users findByEmail(String emailID) {
    // TODO Auto-generated method stub
    try{

        List<Users> users = new ArrayList<Users>();

        users = this.sessionFactory.getCurrentSession().createQuery("FROM Users WHERE emailID = :email_ID")
                .setParameter("email_ID", emailID).list();

        if(users.size() > 0)
            return (Users)users.get(0);
        else
            return null;
    }
    catch(Exception exc)
    {
        log.error(exc.getMessage());
        return null;
    }
}

如何使用 hibernate 仅获取特定列而不是获取 20 列?

【问题讨论】:

    标签: java mysql spring hibernate spring-mvc


    【解决方案1】:

    您可以尝试使用结果转换器

    List<User> users = session
    .createQuery(
    "SELECT userID as userID, firstName as firstName FROM Users WHERE emailID = :email_ID")
    .setParameter("email_ID", emailID)
    .setResultTransformer(new AliasToBeanResultTransformer(User.class)).list();
    

    您需要指定投影别名:firstName as firstName,但您可以尝试不使用它。

    【讨论】:

      【解决方案2】:

      每当您选择多个列时,查询将返回List&lt;Object[]&gt;

      List<Object[]> rows = this.sessionFactory.getCurrentSession()
                           .createQuery("SELECT userID, firstName, lastName,
                            imageURL, password,emailID, enabled 
                             FROM Users WHERE emailID = :email_ID")
                            .setParameter("email_ID", emailID).list();
      

      现在迭代

      (Object[] row: rows) {
          System.out.println(" ------------------- ");
          System.out.println("userid: " + row[0]);
          System.out.println("firstName: " + row[1]);
          User u=new User();
          u.setUserId(row[0]);
          u.setFirstName(row[1]);
          u.setLastName(row[2]);
      
      }
      

      其他行也一样

      Reference

      【讨论】:

      • 但是我想返回 users 对象,因为我正在使用它进行使用 Spring Security 的登录身份验证。
      • 如果您想要User 对象,您不应该期望获得与之关联的所有列吗?
      猜你喜欢
      • 2011-08-29
      • 2016-02-21
      • 1970-01-01
      • 1970-01-01
      • 2018-07-31
      • 2016-03-30
      • 2021-11-22
      • 2014-10-05
      • 1970-01-01
      相关资源
      最近更新 更多