Hibernate SQLQuery 列表方法返回对象而不是对象数组
Posted
技术标签:
【中文标题】Hibernate SQLQuery 列表方法返回对象而不是对象数组【英文标题】:Hibernate SQLQuery list method returns Object instead of object array 【发布时间】:2017-08-09 07:27:20 【问题描述】:我在使用 Hibernate SQLQuery.list()
方法时有这种奇怪的行为。
以下是问题描述:
我有一个 sql 选择查询,它只从数据库中检索单个列(组)(即select group from peopleGroup where groupid = 10
)
我正在对象数组列表中收到上述列表的结果
即,
SQLQuery hQuery = session.createSQLQuery("select group from peopleGroup where groupid = 10");
List<Object[]> result = (List<Object[]>)hQuery.list();
理想情况下,结果应该包含对象数组的列表,但是当我检查时,结果的第 0 个索引包含字符串对象而不是对象数组。
但是,如果我在查询的 select 子句中使用多于一列,比如说 2 列,我能够将结果的第 0 个索引视为对象数组,即 Object[2]="group","groupid";
即使我在查询的 select 子句中只提到了一列,我如何获取 Object 数组?
【问题讨论】:
你不会..... 【参考方案1】:Docs 状态:
列表列表()
以列表形式返回查询结果。如果查询包含多个 每行结果,结果在 Object[] 的实例中返回。
自己转换,像这样。
List<Object[]> l = new ArrayList<>();
for(Object o : query.list())
Object[] arr = o;
l.add(arr);
【讨论】:
我现在了解文档,但我是否有任何选项可以实现我的目标,即尽管我在 select 子句中有单列,但我需要将返回的对象放入对象数组中? 自行转换。添加示例。【参考方案2】:你可以像下面的代码一样创建一个对象映射器
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);
【讨论】:
【参考方案3】:我想要的只是修复在将 result.get(0) 分配给容器期间捕获的 ClassCastException,即 container = result.get(0);
由于提到的 list() 方法返回的值在查询的 select 子句中包含单列的情况下包含对象,并且不允许我从某个对象强制转换为 Object[](对象数组)。 相反,我尝试了如下解决方法
已经存在的代码
SQLQuery hQuery = session.createSQLQuery("select group from peopleGroup where groupid = 10");
List<Object[]> result = (List<Object[]>)hQuery.list();
Object[] container = result.get(0);
现在我已经设置了如下条件来决定如何为 Object[]
赋值
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);
上述解决方案在我的情况下似乎有效!
【讨论】:
以上是关于Hibernate SQLQuery 列表方法返回对象而不是对象数组的主要内容,如果未能解决你的问题,请参考以下文章