Hibernate将NULL值粘贴到列表中

Pat*_*iel 11 java hibernate

我继承了一些使用Hibernate的Java代码.使用此代码的一些人现在报告说他们在整个地方都获得了NullPointerExceptions.

我已经能够跟踪它了,发现当我们执行一个从数据库中提取对象列表的查询时,它有一个对象列表(从另一个表中提取)Hibernate似乎在list(NULL值).所以列表可能看起来像这样:

Object
Object
NULL
Object
Run Code Online (Sandbox Code Playgroud)

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

List<PrinterGroup> groups = 
    this.getSession().createQuery( "from PrinterGroup" ).list();
Run Code Online (Sandbox Code Playgroud)

然后在每个PrinterGroup内部是一个包含NULL值的过滤器列表.

虽然我可以到处找到每个实例,但是我们遍历这个列表并添加一个NULL检查我觉得它是一个bandaid修复,并且必须有一种方法告诉Hibernate不要拉空值.

编辑:

  • 我们正在使用Hibernate 3.2.2

EDIT2:

所以数据库似乎令人困惑.PrinterGroup - > Filter关系是一对多关系.所以PrinterGroups有一个过滤器列表.问题是,当数据库出来时,过滤器列表中包含空值(顺便说一下,数据库中没有空值),列表如上所示.

EDIT3:

这是PrinterGroup HBM中的映射relavant picese

<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>
Run Code Online (Sandbox Code Playgroud)

Filter是一个非常基本的POJO映射.

mat*_*t b 17

这个集合是用<list>(或其他索引集合)<list-index>映射的吗?

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

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