Java Hibernate SQLQuery列表方法返回对象而不是对象数组
我在HibernateJava Hibernate SQLQuery列表方法返回对象而不是对象数组,java,hibernate,hql,Java,Hibernate,Hql,我在HibernateSQLQuery.list()方法中有这种奇怪的行为 以下是对问题的描述: 我有一个sql select查询,它只从数据库中检索单个列(组)(即,从peopleGroup中选择组,其中groupid=10) 我正在对象数组列表中接收上述列表的结果 i、 e SQLQuery hQuery=session.createSQLQuery(“从groupid=10的peopleGroup中选择组”); List result=(List)hQuery.List(); 理想情况下
SQLQuery.list()方法中有这种奇怪的行为
以下是对问题的描述:
我有一个sql select查询,它只从数据库中检索单个列(组)(即,从peopleGroup中选择组,其中groupid=10
)
我正在对象数组列表中接收上述列表的结果
i、 e
SQLQuery hQuery=session.createSQLQuery(“从groupid=10的peopleGroup中选择组”);
List result=(List)hQuery.List();
理想情况下,结果应该包含对象数组的列表,但当我检查时,结果的第0个索引包含字符串对象,而不是对象数组。
然而,如果我使用了不止一列,比如说查询的select子句中的两列,我就能够看到结果的第0个索引作为对象数组,即,Object[2]={“group”,“groupid”}代码>
即使查询的select子句中只提到一列,如何获取对象数组?说明:
列表()
以列表形式返回查询结果。如果查询包含多个
结果每行,结果在对象[]的实例中返回
你自己把它转换,就像这样
List<Object[]> l = new ArrayList<>();
for(Object o : query.list()) {
Object[] arr = {o};
l.add(arr);
}
listl=newarraylist();
对于(对象o:query.list()){
对象[]arr={o};
l、 添加(arr);
}
您可以创建如下代码所示的对象映射器
public class QueryMapper {
private String group;
//setter and getter
}
您必须像下面这样更改代码
SQLQuery hQuery = session.createSQLQuery("select group from peopleGroup where groupid = 10");
List<Object[]> result = (List<Object[]>)hQuery.list();
List<QueryMapper> list = new ArrayList<QueryMapper>();
for(Object[] object: result){
QueryMapper queryMapper = new QueryMapper();
if(object[0]!=null){
queryMapper.setGroup((String)object[2]);
}
list.add(queryMapper);
}
SQLQuery hQuery=session.createSQLQuery(“从groupid=10的peopleGroup中选择组”);
List result=(List)hQuery.List();
列表=新的ArrayList();
对于(对象[]对象:结果){
QueryMapper QueryMapper=新QueryMapper();
如果(对象[0]!=null){
setGroup((String)对象[2]);
}
list.add(queryMapper);
}
我只想修复ClassCastException,该异常在result.get(0)分配到容器时被捕获,即container=result.get(0)
由于前面提到的list()方法返回的值在查询的select子句中只有一列时包含object,因此不允许我从某个object转换为object[](object array)。
相反,我尝试了下面这样的方法
SQLQuery hQuery = session.createSQLQuery("select group from peopleGroup where groupid = 10");
List<Object[]> result = (List<Object[]>)hQuery.list();
List<QueryMapper> list = new ArrayList<QueryMapper>();
for(Object[] object: result){
QueryMapper queryMapper = new QueryMapper();
if(object[0]!=null){
queryMapper.setGroup((String)object[2]);
}
list.add(queryMapper);
}
已存在的代码
SQLQuery hQuery = session.createSQLQuery("select group from peopleGroup where groupid = 10");
List<Object[]> result = (List<Object[]>)hQuery.list();
Object[] container = result.get(0);
在我的情况下,上述解决方案似乎有效 你不会……我现在理解了这个文档,但是我有没有办法实现我的目标,虽然我在select子句中有一列,但我需要将返回的对象放入对象数组中?自己转换它。添加一个示例。
SQLQuery hQuery = session.createSQLQuery("select group from peopleGroup where groupid = 10");
List<Object[]> result = (List<Object[]>)hQuery.list();
Object[] container = null;
if(result.get(0) instanceof Object[])
container = result.get(0);
else {
container = new Object[1];
container[0] = result.get(0);
}