Java Spring Hibernate获取选定列
我试图使用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
@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();