Java Hibernate SQLQuery列表方法返回对象而不是对象数组

Java 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(); 理想情况下

我在Hibernate
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);
      }