hibernate query返回的list 里面的对象都是Object 无法转换成我要的类型

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hibernate query返回的list 里面的对象都是Object 无法转换成我要的类型相关的知识,希望对你有一定的参考价值。

这是hibernate输出的sql语句
select
service0_.id as id10_0_,
s_category1_.id as id9_1_,
service0_.name as name10_0_,
service0_.base_price as base3_10_0_,
service0_.vip_price as vip4_10_0_,
service0_.profile as profile10_0_,
service0_.service_image as service6_10_0_,
service0_.cate_id as cate7_10_0_,
s_category1_.name as name9_1_,
s_category1_.description as descript3_9_1_
from
service service0_
inner join
s_category s_category1_
on service0_.cate_id=s_category1_.id limit ?
hibernate映射:
<class name="Service" table="service">
<id name="id" type="integer" column="id">
<generator class="native"></generator>
</id>
<property name="name" type="string" column="name"></property>
<property name="base_price" type="double" column="base_price"></property>
<property name="vip_price" type="double" column="vip_price"></property>
<property name="profile" type="string" column="profile"></property>
<property name="service_image" type="string" column="service_image"></property>
<set name="brands" table="brandservice" inverse="false" lazy="true">
<key column="service_id"></key>
<many-to-many class="Brand" column="brandid"></many-to-many>
</set>
<many-to-one name="cate" class="S_category" column="cate_id" fetch="join"></many-to-one>
</class>
service 类属性:属性都私有 get/set没错的
int id;private name;double base_price;
double vip_price ;String profile;String service_image;
S_category cate;Set<Brand> brands;

参考技术A for循环
for (Iterator ite = list.iterator(); ite.hasNext();)
Object[] obj = (Object[]) ite.next();
System.out.println(obj[1]);
System.out.println(obj[2]);

这样试试呢?追问

from Service s join s.cate c
hql语句是这样写的
用这种循环的话 返回obj[0] 和obj[1]两个对象
但是我没查字段啊。。。 为什么会返回对象数组

本回答被提问者采纳
参考技术B 用迭代器就可了
Iterator it = al.Iterator();
it.get你要的类型就ok!!追问

大哥 就是迭代的时候报错了啊

参考技术C 莫非你没写映射配置?追问

都写了的

追答

去掉fetch属性试试,我自己的工程加了以后也转不了了

追问

我的hql语句是 from Service s join s.cate c
去掉也没用的

Hibernate query.list() 方法返回空列表而不是空值

【中文标题】Hibernate query.list() 方法返回空列表而不是空值【英文标题】:Hibernate query.list() method is returning empty list instead of null value 【发布时间】:2011-04-05 16:28:50 【问题描述】:

当没有行时,query.list()criteria.list() 都返回 empty 列表而不是 null 值。

这背后的原因是什么?

【问题讨论】:

为什么要为空?我了解当您查询单个结果时 - 未找到返回 null 是有意义的。但是 list() 应该总是返回一个空列表!空列表是什么意思? 【参考方案1】:

原因是不强制在客户端代码中检查空值,与Effective Java 2nd Edition 第 43 条一致:返回空数组或集合,而不是空值

这使得客户端代码更简单,更不容易出错(很可能也是方法实现)。

null-return 习惯用法很可能是 C 编程语言的遗留物,在 哪些数组长度与实际数组分开返回。在 C 中,没有 如果返回零作为长度,则分配数组的优势。

【讨论】:

hmm...但是即使它阻止了空检查,我们仍然必须检查列表的大小...对吗?而且作为一种良好做法,我们也总是检查 null (至少在我们的团队中)。 这就是重点 - 如果您确定(基于 API 的承诺)一个值不能为空,那么您就不要检查空值。不,你不需要检查大小。当您迭代集合时,它只会跳过迭代。 好的...明白了。如果它是 null 并且作为我的客户,如果我没有检查它,NPE 可以关闭我的应用程序。但是如果它是一个空集合,它会跳过逻辑并继续(因为我们通常会检查大小)。感谢 Peter 和 Bozho。 如果你想跳过代码,如果列表是空的,不要检查大小,但如果它是空的:list.isEmpty()(它更快更清晰)【参考方案2】:

一致:返回一个包含所有结果的列表,不管有没有。

【讨论】:

以上是关于hibernate query返回的list 里面的对象都是Object 无法转换成我要的类型的主要内容,如果未能解决你的问题,请参考以下文章

Hibernate HQL - query.list() 返回对象数组的对象数组

Hibernate query.list() 方法返回空列表而不是空值

Hibernate Query.list 返回实际的 Object 实例而不是预期的类型

hibernate用HQL查询集合属性

hibernate executeSQLQuery 查询多个表怎么返回值

Hibernate学习笔记 — Hibernate的查询