我继承了一段使用Hibernate的Java代码。现在有些人使用此代码时报告他们到处都遇到了NullPointerExceptions。
我已经找到问题所在,发现当我们执行从数据库中提取对象列表的查询时,其中一个表格中的对象列表(从另一个表格中提取)似乎会留下空洞(NULL值)。因此,该列表可能看起来像:
Object
Object
NULL
Object
我们正在使用的代码从数据库中提取信息:
List<PrinterGroup> groups =
this.getSession().createQuery( "from PrinterGroup" ).list();
每个打印机组内部都有一个包含 NULL 值的过滤器列表。
虽然我可以四处寻找我们循环遍历此列表并添加 NULL 检查的每个实例,但我觉得这只是一个权宜之计,必须有一种方法告诉 Hibernate 不要获取 null 值。
编辑:
- 我们正在使用 Hibernate 3.2.2
编辑2:
所以数据库似乎很困惑。 PrinterGroup->Filter 关系是一对多关系。 因此,PrinterGroups 拥有一个过滤器列表。 问题在于当列表出现时,其中的过滤器列表具有 null 值(顺便说一下,数据库中没有 null 值),而列表看起来像上面那样。
编辑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>
来映射集合?请发布你的.hbm
映射文件。 - matt b