Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring Hibernate获取选定列_Java_Mysql_Spring_Hibernate_Spring Mvc - Fatal编程技术网

Java Spring Hibernate获取选定列

Java Spring Hibernate获取选定列,java,mysql,spring,hibernate,spring-mvc,Java,Mysql,Spring,Hibernate,Spring Mvc,我试图使用hibernate获取一些特定的列,但是这个查询总是失败 @Override public Users findByEmail(String emailID) { // TODO Auto-generated method stub try{ List<Users> users = new ArrayList<Users>(); users = this.sessionFactory.getCurrentSes

我试图使用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;
    }
}
@覆盖
公共用户findByEmail(字符串emailID){
//TODO自动生成的方法存根
试一试{
列表用户=新建ArrayList();
users=this.sessionFactory.getCurrentSession().createQuery(“从emailID=:email\u ID的用户中选择userID、firstName、lastName、imageURL、密码、emailID、enabled”)
.setParameter(“email_ID”,emailID).list();
如果(users.size()>0)
返回(用户)用户。获取(0);
其他的
返回null;
}
捕获(异常exc)
{
log.error(exc.getMessage());
返回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;
    }
}
@覆盖
公共用户findByEmail(字符串emailID){
//TODO自动生成的方法存根
试一试{
列表用户=新建ArrayList();
users=this.sessionFactory.getCurrentSession().createQuery(“来自emailID=:email\u ID的用户”)
.setParameter(“email_ID”,emailID).list();
如果(users.size()>0)
返回(用户)用户。获取(0);
其他的
返回null;
}
捕获(异常exc)
{
log.error(exc.getMessage());
返回null;
}
}

如何使用hibernate只获取特定列,而不获取20个列?

每当您选择多列时,查询将返回
列表

其他行也一样


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

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();
列出用户=会话
.createQuery(
“选择userID作为userID,firstName作为用户的firstName,其中emailID=:email_ID”)
.setParameter(“email_ID”,emailID)
.setResultTransformer(新别名为BeanResultTransformer(User.class)).list();

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

但是我想返回
users
对象,因为我使用它来使用spring security进行登录身份验证。如果您想要
User
对象,您不应该期望获得与它关联的所有列吗?
(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]);

}
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();