我继承了一些使用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不要拉空值.
编辑:
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
与预期的地方空元素.
归档时间: |
|
查看次数: |
11579 次 |
最近记录: |