我继承了一些使用Hibernate的Java代码。现在,使用此代码的一些人报告他们到处都在获取NullPointerExceptions。
我已经找到了答案,发现执行查询从数据库中拉出一个对象列表时,该查询具有一个对象列表(从另一个表中拉出),Hibernate似乎在列表(NULL值)。因此,列表可能类似于:
Object Object NULL Object
我们用于从数据库中提取信息的代码是:
List<PrinterGroup> groups = this.getSession().createQuery( "from PrinterGroup" ).list();
然后,在每个PrinterGroup内是其中包含NULL值的过滤器列表。
虽然我可以四处寻找所有实例,但我们遍历了此列表并添加了NULL检查,但我认为这是一个临时的解决方案,并且必须有一种方法告诉Hibernate不要拉入null值。
编辑:
编辑2:
因此数据库似乎令人困惑。PrinterGroup-> Filter关系是一对多关系。因此PrinterGroups有一个过滤器列表。问题在于,当过滤器列表从数据库中出来时,其中的列表中包含空值(顺便说一下,数据库中没有空值),并且列表看起来像上面一样。
编辑3:
这是PrinterGroup HBM中的映射相关的野餐
<subclass name="PrinterGroup" discriminator-value="PG"> <list name="filters" lazy="true" table="PG_FILTER" inverse="false" cascade="all-delete-orphan"> <key> <column name="PG_ID" not-null="false"/> </key> <index column="LISTPOSITION"/> <one-to-many class="Filter"/> </list>
过滤器是一个非常基本的POJO映射。
此集合是否与<list>(或其他索引集合)<list- index>映射?
<list>
<list- index>
除具有set和bag语义的映射外,所有集合映射都需要在集合表中有一个索引列。索引列是映射到数组索引,列表索引或Map键的列。…数组或列表的索引始终为整数类型,并使用元素进行映射。映射的列包含默认情况下从零开始编号的连续整数。
我可以想象使用,当索引的集合,如果你的索引列中有间隙(即,它具有类似的值0,1,3,7),Hibernate对将填充造成List与预期的地方空元素。
0
1
3
7
List