春季休眠获取选定的列
问题描述:
我想获得一些特定的列使用休眠,但这个查询总是失败。春季休眠获取选定的列
@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多岁?
答
每当你会选择多列的查询将返回List<Object[]>
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]);
}
,并同其他行
答
你可以尝试使用结果变换器
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
,但您可以尝试不使用它。
但我想返回'用户'对象,因为我使用弹簧安全性进行登录认证。 –
如果你想'User'对象不应该期望得到所有与它相关的列? –
@HarshitShrivastava请看更新的答案 – xrcwrn