相信有一部分开发者遇到过这样一个问题:使用hibernate加载带有List集合子属性的对象时,该集合中存在空对象。
数据库中明明存在数据,集合中也获取到了相应的数据,却在迭代集合时出现空指针异常。
/*这是一级分类列表,有一个属性是绑定的二级分类集合*/
<
hibernate-mapping
>
</hibernate-mapping><class name="cn.me.tpoff.category.vo.Category" table="t_categorys"><id name="cid" type="java.lang.Integer"><column name="cid" /><generator class="native" /></id><property name="cname" type="java.lang.String"><column name="cname" /></property><list name="categorySeconds" inverse="false" fetch="join" lazy="false" cascade="delete" table="t_categoryseconds"><key><column name="cid" /></key><list-index column="csid"></list-index><one-to-many class="cn.me.tpoff.categorysecond.vo.CategorySecond" /></list></class>
/*这是二级分类的映射文件*/
<
hibernate-mapping
>
</hibernate-mapping><class name="cn.me.tpoff.categorysecond.vo.CategorySecond" table="t_categoryseconds"><id name="csid" type="java.lang.Integer"><column name="csid" /><generator class="native" /></id><property name="csname" type="java.lang.String"><column name="csname" /></property><many-to-one name="category" class="cn.me.tpoff.category.vo.Category" fetch="join" lazy="false"><column name="cid" /></many-to-one></class>
正是因为我用的list集合,导致我最终的list集合对象中出现了空指针对象,经过我多方的查阅资料,终于找到了原因。list集合的索引从零开始,并且是根据你指定的列增加,
当t_categoryseconds中数据的csid排列不连续时,比如0-50、101-150。由于集合的索引是连续的,而参照的那个字段是不连续的,所以欠缺的索引位置就会用空对象填补!