这是我的user.java
域类
public class User {
private Integer iduser;
private String user_name;
private String user_activation_key;
private String user_password;
private String user_email;
private Character registered;
public Integer getIduser() {
return iduser;
}
public void setIduser(Integer iduser) {
this.iduser = iduser;
}
public String getUser_name() {
return user_name;
}.....more code
在另一个Test类中,我编写了如下代码。
SQLQuery query = session.createSQLQuery("select * from user");
List<User> availableUsers = new ArrayList<User>();
availableUsers=(List<User>)query.list();
查询是一个SQLQuery(Hibernate实现),用于从DB获取用户列表
但我无法将(query.list)
强制转换为List<User>
我得到了阶级演员异常。 availableUser
是一个对象列表
我应该遵循哪些步骤。
答案 0 :(得分:2)
使用HQL
SQLQuery query = session.createQuery("from User"); //note here User is POJO class name
List<User> availableUsers = new ArrayList<User>();
availableUsers=(List<User>)query.list();
这些将返回一个对象数组列表(Object[])
,其中包含user
表中每列的标量值。 Hibernate将使用ResultSetMetadata
来推断返回的标量值的实际顺序和类型。
使用addScalar()
see more
createSQLQuery
方法
答案 1 :(得分:1)
query.list()
返回List<Object>
。
每个对象实际上都是一个对象数组(Object[])
,它有整行。
例如,如果您获得所有Employee结果,则列表如下: -
{ {emp_id,emp_name,other_emp_col} , {emp_id,emp_name,other_emp_col}, {emp_id,emp_name,other_emp_col} ....}
因此,为了检索它们,你必须迭代Object列表并将iterator.next()转换为Object数组,然后构造自己的User对象。
例如: -
List<Object> userList = query.list();
Iterator<Object> itr = userList.iterator();
while(itr.hasNext()){
Object[] userRow = (Object[]) itr.next();
User userObj = new User();
userObj.setName(userRow[0]);
}
要像Aniket所说的那样保存所有这些工作,请使用HQL