一尘不染

Hibernate将NULL值粘贴到列表中

hibernate

我继承了一些使用Hibernate的Java代码。现在,使用此代码的一些人报告他们到处都在获取NullPointerExceptions。

我已经找到了答案,发现执行查询从数据库中拉出一个对象列表时,该查询具有一个对象列表(从另一个表中拉出),Hibernate似乎在列表(NULL值)。因此,列表可能类似于:

Object
Object
NULL
Object

我们用于从数据库中提取信息的代码是:

List<PrinterGroup> groups = 
    this.getSession().createQuery( "from PrinterGroup" ).list();

然后,在每个PrinterGroup内是其中包含NULL值的过滤器列表。

虽然我可以四处寻找所有实例,但我们遍历了此列表并添加了NULL检查,但我认为这是一个临时的解决方案,并且必须有一种方法告诉Hibernate不要拉入null值。

编辑:

  • 我们正在使用Hibernate 3.2.2

编辑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映射。


阅读 227

收藏
2020-06-20

共1个答案

一尘不染

此集合是否与<list>(或其他索引集合)<list- index>映射?

除具有set和bag语义的映射外,所有集合映射都需要在集合表中有一个索引列。索引列是映射到数组索引,列表索引或Map键的列。…数组或列表的索引始终为整数类型,并使用元素进行映射。映射的列包含默认情况下从零开始编号的连续整数。

我可以想象使用,当索引的集合,如果你的索引列中有间隙(即,它具有类似的值0137),Hibernate对将填充造成List与预期的地方空元素。

2020-06-20